Эти номера Ружья представляют собой последовательность с довольно простым определением , но некоторые интересными структурами. Начните с натуральных чисел:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
Теперь возьмите все числа с индексами, кратными 2 , сгруппируйте их в пары и поменяйте местами числа в каждой паре:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
^ ^ ^ ^ ^ ^ ^
<---> <---> <-----> <----
1, 4, 3, 2, 5, 8, 7, 6, 9, 12, 11, 10, 13, 16, ...
Теперь сделайте то же самое с индексами, кратными 3 :
1, 4, 3, 2, 5, 8, 7, 6, 9, 12, 11, 10, 13, 16, ...
^ ^ ^ ^
<------> <--------->
1, 4, 8, 2, 5, 3, 7, 6, 10, 12, 11, 9, 13, 16, ...
А потом для 4 , 5 , 6 и так далее:
1, 4, 8, 2, 5, 3, 7, 6, 10, 12, 11, 9, 13, 16, ...
1, 4, 8, 6, 5, 3, 7, 2, 10, 12, 11, 14, 13, 16, ...
1, 4, 8, 6, 12, 3, 7, 2, 10, 5, 11, 14, 13, 16, ...
1, 4, 8, 6, 12, 14, 7, 2, 10, 5, 11, 3, 13, 16, ...
...
После k таких шагов первые k + 1 числа будут зафиксированы. Таким образом, мы можем определить бесконечную последовательность чисел дробовика как предел, позволяющий k перейти в бесконечность. Первые 66 номеров:
1, 4, 8, 6, 12, 14, 16, 9, 18, 20, 24, 26, 28, 22, 39, 15, 36, 35, 40, 38, 57, 34, 48, 49, 51, 44,
46, 33, 60, 77, 64, 32, 75, 56, 81, 68, 76, 58, 100, 55, 84, 111, 88, 62, 125, 70, 96, 91, 98, 95,
134, 72, 108, 82, 141, 80, 140, 92, 120, 156, 124, 94, 121, 52, 152, 145, ...
Интересный факт: Несмотря на то, что эта последовательность получается только путем перестановки натуральных чисел, она не содержит простых чисел.
Соревнование
По заданному целому числу n > 0
найти n
номер дробовика. Вы можете написать программу или функцию, получая ввод через STDIN (или ближайшую альтернативу), аргумент командной строки или аргумент функции и возвращать вывод или выводить его в STDOUT (или ближайшую альтернативу).
Это код гольф, поэтому выигрывает самое короткое представление (в байтах).
Leaderboards
Это дает больше ответов, чем я думал, а также несколько человек соревнуются на одном языке. Итак, вот фрагмент стека для генерации как регулярной таблицы лидеров, так и обзора победителей по языкам.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
10
, 21
, 25
и 30
не появляются либо, например.
k
й-й итерации, k
й-й элемент в массиве перемещается в т- 2k
ю позицию и больше не будет касаться до 2k
итераций, когда он будет транспонирован в т- 4k
ю позицию до бесконечности. Простое число не транспонируется до тех пор, пока не наступит его очередь, так что все простые числа перемещаются вперед. Но мы можем легко составить список невинных жертв, просто распечатав первый элемент для транспонирования на итерации 2 и каждой нечетной итерации. Список идет: 2, 3, 5, 7, 10, 11, 13, 21, 17, 19, 30, 23, 27, 25, 29, 31, 45, 42, 37, 54, 41, 43, 65, ...