Твоя пирамида
Пирамида, которую я хочу, чтобы ты построил, целиком состоит из кубов. Он имеет 24 слоя, а N- й слой сверху содержит N 2 кубов, расположенных в квадрате N на N. Пирамида выглядит так:
Чтобы построить пирамиду, вам понадобится запас кубиков. Вам дают 4900 кубов, расположенных в квадрате 70 на 70, который выглядит следующим образом:
(Хорошо, я признаю, что изображение квадрата совершенно не нужно.)
Так как 1 2 + 2 2 + 3 2 + ... + 24 2 = 70 2 , у вас есть ровно правильное количество кубов для построения пирамиды. Все, что вам нужно сделать, это сказать мне, куда должен идти каждый куб.
Твое задание
Вы должны выбрать произвольную биекцию между кубиками в квадрате и кубиками в пирамиде. (Было бы неплохо, если бы в вашем ответе говорилось, какую из 4900! Разных биекций вы используете.)
Затем напишите функцию или программу, которая выполняет следующее:
- Учитывая расположение куба в квадрате 70 на 70 (в виде пары координат
(X,Y)
), - Выведите его местоположение в пирамиде (в виде тройки координат
(A,B,C)
).
Все входные и выходные координаты могут быть либо 0-индексированы, либо 1-индексированы. Предполагая, что 1-индексированный, ваш ввод (X,Y)
будет парой целых чисел от 1 до 70. Ваш вывод (A,B,C)
будет тройкой целых чисел; A
должен быть слой, считающий сверху (между 1 и 24) и (B,C)
должен быть координатами этого куба в этом слое (между 1 и A
).
Например:
- верхний куб пирамиды имеет координаты
(1,1,1)
. - В четырех углах основания пирамиды имеют координаты
(24,1,1)
,(24,1,24)
,(24,24,1)
и(24,24,24)
. - Если вы решите разместить углы квадрата в углах пирамиды, то при вводе
(70,1)
вы можете дать вывод(24,24,1)
.
Вы можете предположить, что в (X,Y)
качестве входных данных вы получите только действительные координаты . Корректность полностью определяется следующим правилом: два разных допустимых входа всегда должны давать два разных допустимых входа.
Это код-гольф : выигрывает самый короткий код.
источник
PHP,
75 8278 байт0 индексированные :
установите P = X * 70 + Y, затем уменьшите P на A 2 , спускаясь до нужного слоя. А-1; P / A; P% A - готово.
(обратное: при увеличении A до нужного уровня: P = P + A 2, затем P = P + A * B + C -> X = P / 70, Y = P% 70)
Беги с
php -nr '<code>' <X> <Y>
; печатает A_B_C.1-индексированный, 82 байта :
источник
Python,
807372 байтаПервое представление, не будь слишком резким q:
0 индексированные
Создает список длиной 4900 со всеми координатами пирамиды и возвращает разные записи списка для каждого ввода.
Попробуйте онлайн!
источник
a**2
доa*a
сохранить байты.Python 2 , 64 байта
Попробуйте онлайн!
источник
С
89,87,8271 байтВзял решение xnor на Python и удалил перенос строки
0 индексированные
1-индексированных
источник
Пакет, 103 байта
0 индексированные. Работает через каждый слой, начиная сверху.
источник
J 37 байт
-4 байта благодаря FrownyFrog
Довольно простой перевод метода Jelly на J. Используется индексирование 0. Верхний квадрат пирамиды - первый. Нижний правый угол основания является последним.
Большая часть кода является образцом для создания тройного индексированного списка как константы. Поиск правильного элемента в этом списке на основе ввода из 2 элементов - это просто вопрос перевода с базы 70 с
70&#.
Попробуйте онлайн!
источник
(#~~:&a:)
->a:-.~
Шелуха , 13 байт
Попробуйте онлайн! Индексы начинаются с 1.
объяснение
Как и некоторые другие ответы, я строю полный список координат пирамиды и просто указываю на него. Я делаю это, перечисляя все тройки,
[A,B,C]
где числа от 1 до 24 (выраженные как 4! Для сохранения байта) и сохраняя те, для которыхA >= max(B,C)
.источник