Мы можем свернуть натуральные числа в прямоугольную спираль:
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
Но теперь, когда они расположены на прямоугольной сетке, мы можем разматывать спираль в другом порядке, например, по часовой стрелке, начиная с севера:
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, 4, 3, 2, 9, 8, 7, 6, 5, 16, 15, 14, 13, 12, 11, 10, 25, 24, 23, 22, 21, 20, 19, 18, 17, ...
Ваша задача - вычислить эту последовательность. ( OEIS A020703 , но предупреждение о спойлере: оно содержит другое интересное определение и несколько формул, которые вы, возможно, захотите выяснить самостоятельно.)
Интересный факт: все 8 возможных заказов на разматывание имеют свои собственные записи OEIS.
Соревнование
Если задано положительное целое число n
, вернуть n
элемент вышеупомянутой последовательности.
Вы можете написать программу или функцию, принимая ввод через STDIN (или ближайшую альтернативу), аргумент командной строки или аргумент функции и выводя результат через STDOUT (или ближайшую альтернативу), возвращаемое значение функции или параметр функции (out).
Применяются стандартные правила игры в гольф .
Тестовые случаи
1 1
2 4
3 3
4 2
5 9
6 8
7 7
8 6
9 5
100 82
111 111
633 669
1000 986
5000 4942
9802 10000
10000 9802
Полный список до и включая n = 11131
смотрите b-файл на OEIS .
источник
jelly.py
и выяснить, какие цепочки поддерживаются.Japt,
201916 байтПроверьте это онлайн!
На основании наблюдения, что
Или, скорее, что
Я не знаю, есть ли это объяснение на странице OEIS, поскольку я еще не смотрел его.
источник
Юлия, 28 байт
Это лямбда-функция, которая принимает целое число и возвращает целое число. Чтобы вызвать его, назначьте его переменной.
Мы определяем m как наибольшее целое число такое, что m 2 ≤ n -1, то есть целочисленный квадратный корень из n -1 (
isqrt
). Затем мы можем упростить выражение OEIS 2 ( m + 1) m - n + 2 до простого 2 ( m 2 + m + 1) - n .Попробуйте онлайн
источник
CJam, 14 байтов
Используя подход Алекса:
2*(m^2+m+1)-n
гдеm = isqrt(n-1)
.источник
ES7,
312826 байтЯ самостоятельно обнаружил формулу Алекса, но не могу доказать это, потому что в то время у меня не было компьютера.
Изменить: 3 байта сохранены частично благодаря @ETHproductions. Сохранено еще 2 байта.
источник
n=>((m=--n**.5|0)+m*m)*2-n+1
будет работать, я думаю.--n
...Pyth, 21 байт
Попробуйте онлайн!
Ничего особенного не происходит. Тот же метод, что и в ответе JAPT.
источник
MATL ,
1613 байтНа основании ответа Линн CJam .
Попробуйте онлайн! (
Y[
был заменен вk
соответствии с изменениями в языке)Это использует другой подход, чем другие ответы ( 16 байт ):
Он явно генерирует две спиральные матрицы (на самом деле, их вертикально перевернутые версии, но это не влияет на вывод). Первый
а второй отслеживает измененный путь:
Чтобы найти
n
-ое число последовательности, достаточно найтиn
во второй матрице и выбрать соответствующее число в первой. Матрицы должны быть достаточно большими, чтобы ониn
появлялись, и иметь нечетный размер, чтобы начало (число1
) находилось в одинаковых позициях в обоих.Попробуйте тоже онлайн ! (
6Y3
был перемещен в соответствии с изменениями в языке)источник
Brachylog , 20 байт
Это использует ту же технику, что и почти все остальные ответы.
объяснение
Интересный факт об этом ответе заключается в том, что его проще и короче использовать
=
, чем скобки.источник