Введение
Вдохновленный недавним видео The Trapped Knight - Numberphile , я столкнулся с проблемой.
Ловушка последовательность рыцаря есть конечная целое число последовательность длины 2016 года, начиная с 1, и имеет следующие правила строительства:
- Напишите числовую спираль следующим образом:
17 16 15 14 13 ...
18 5 4 3 12 ...
19 6 1 2 11 ...
20 7 8 9 10 ...
21 22 23 24 25 ...
- Поместите рыцаря на 1.
- Переместите коня в сетку с наименьшим числом, которое он может пройти, которого не посещали ранее, согласно правилам шахмат (то есть 2 единицы по вертикали и 1 единица по горизонтали, или наоборот).
- Повторяйте, пока рыцарь не застрянет.
Вот первые три шага:
Шаг 1
17 [16] 15 [14] 13
[18] 5 4 3 [12]
19 6 < 1> 2 11
[20] 7 8 9 [10]
21 [22] 23 [24] 25
Возможные ходы: 10, 12, 14, 16, 18, 20, 22, 24, среди которых наименьшее - 10, поэтому второе слагаемое - 10.
Шаг 2
4 [ 3] 12 [29] 54
( 1) 2 11 28 [53]
8 9 <10> 27 52
[23] 24 25 26 [51]
46 [47] 48 [49] 50
Возможные ходы: 1 , 3, 23, 29, 47, 49, 51, 53, среди которых наименьшее - 3, поэтому третий член - 3.
Шаг 3
35 [34] 33 [32] 31
[16] 15 14 13 [30]
5 4 < 3> 12 29
[ 6] ( 1) 2 11 [28]
7 [ 8] 9 (10) 27
Возможные ходы: 6, 8, 10 , 16, 28, 30, 32, 34, среди которых наименьшее - 6, поэтому четвертый член - 6.
Последовательность звездочек с:
1 10 3 6 9 4 7 2 5 8 11 14 ...
и заканчивается
... 2099 2284 2477 2096 2281 2474 2675 2884 3101 2880 2467 2084
Вызов
Напишите самую короткую программу или функцию, получив в качестве входного значения целое число в диапазоне [1, 2016]
(или, [0, 2015]
если используется 0-индексированный), выведите число с этим индексом в захваченной последовательности коня. Вы можете выбрать индексирование последовательности с 0-индексированием или 1-индексированием, но вы должны указать, какую схему индексации вы используете.
Контрольные примеры (1-индексированные)
n | s(n)
-----+-----
1 | 1
2 | 10
3 | 3
6 | 4
11 | 11
21 | 23
51 | 95
101 | 65
201 | 235
501 | 761
1001 | 1069
2001 | 1925
2016 | 2084
Для всех возможных выходов, пожалуйста, обратитесь к этой странице .
Критерии победы
Самый короткий код каждого языка выигрывает. Применяются ограничения на стандартные лазейки.
12851850258
Ответы:
JavaScript (ES7),
182181 байтПопробуйте онлайн!
Как?
Немного измененная версия моего ответа на «Путь антилопы гну» определенно короче (и быстрее). Но я хотел попробовать другой подход. Между прочим, я думаю, что может быть проще реализовать этот метод в некоторых esolangs.
Алгоритм:
Мы либо перезапускаем на шаге 2, либо возвращаем последний найденный индекс, если все готово.
Node.js , 155 байт
Попробуйте онлайн!
источник
05AB1E , 53 байта
3
2
θ
Попробуйте онлайн или проверьте еще несколько тестовых случаев (время ожидания для самых больших тестовых случаев).
Объяснение:
См. Объяснение в моем связанном ответе «Путь гну» . Единственными модифицированными частями являются:
и завершающий:
РЕДАКТИРОВАТЬ: порт подхода @Arnauld в своем ответе JavaScript (ES7) является (в настоящее время):
05AB1E ,
5756 байтПопробуйте онлайн или проверьте еще несколько тестовых случаев (время ожидания для самых больших тестовых случаев).
Объяснение:
Σ·nàDtyÆ+yO·<.±*->}
источник
МАТЛ ,
4137 байтВвод на основе 0.
Попробуйте онлайн!
источник