Доктор, пытаясь убежать от сил Далеков, решил отправить их по кругу, путешествуя по разным карманам пространства по спирали.
В зависимости от характера доступного пространства-времени, Доктор должен ввести в ТАРДИС управление высотой и шириной раздела пространства и своей точкой входа, с которой начинается спираль.
Раздел пространства может быть представлен как сетка h x w, заполненная последовательными целыми числами слева направо, сверху вниз, начиная с 1.
Начальная позиция указывается как rc для строки и столбца ... Исходя из этого, программное обеспечение ТАРДИС должно выпустить упорядоченный список целых чисел, полученный путем спирали наружу в направлении против часовой стрелки из строки r столбца c , начиная вверх ...
Ваша задача как компаньона Доктора состоит в том, чтобы запрограммировать ТАРДИС на получение четырех чисел в формате height width row column
и определить, в каком секторе пространства ТАРДИС должен пройти, чтобы соответствовать спиральному движению, описанному ниже ...
Вход 1
5 5 3 3
(Сетка 5 х 5, начиная с позиции 3,3)
Выход 1
13 8 7 12 17 18 19 14 9 4 3 2 1 6 11 16 21 22 23 24 25 20 15 10 5
Объясняя вывод
Оригинальная сетка
Генерируемая спираль
Вход 2
2 4 1 2
(2 х 4 сетки, начиная с позиции 1,2)
Выход 2
2 1 5 6 7 3 8 4
Объясняя вывод
Немного отличается, поскольку спираль теперь должна вращаться вокруг сетки, чтобы генерировать соответствующий результат ...
Оригинальная сетка
Генерируемая спираль
Правила:
Это код-гольф, поэтому самая короткая длина кода получает одобрение.
Приведенные выше примеры должны быть использованы для проверки вашего кода. Если это не обеспечивает соответствующий вывод, что-то не так ...
В вашем ответе должны быть указаны варианты кода для игры в гольф и в гольф ...
Удачи!
Ответы:
JavaScript (ES6) 124
163 177Редактировать совершенно по- другому, не нужно массив для хранения посещенных ячеек. Используя тот факт, что сторона спирали увеличивается на 1 после каждых 2 витков.
источник
Питон 3, 191
Вероятно, не очень хороший результат, но здесь все сказано:
Мы движемся по спирали, увеличивая длину стороны после каждой секунды поворота. Если наша позиция находится внутри данной сетки, мы печатаем ее соответствующий номер.
Переменные:
источник