Номери дробовика - це послідовність із досить простим визначенням, але деякою цікавою структурою. Почніть з натуральних чисел:
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 числа. Таким чином, ми можемо визначити нескінченну послідовність чисел Shotgun як межу відпуску 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
th Shotgun. Ви можете написати програму або функцію, взявши введення через STDIN (або найближчу альтернативу), аргумент командного рядка або аргумент функції і повернути вихідний результат або роздрукувати його в STDOUT (або найближчій альтернативі).
Це код гольфу, тому виграє найкоротше подання (у байтах).
Табло лідерів
Це отримує більше відповідей, ніж я думав, а також кілька людей, які змагаються однією мовою. Отже, тут є фрагмент стека для створення як звичайного табло, так і огляду переможців за мовою.
Щоб переконатися, що ваша відповідь відображається, будь ласка, почніть свою відповідь із заголовка, використовуючи наступний шаблон Markdown:
# Language Name, N bytes
де N
розмір вашого подання. Якщо ви покращите свій рахунок, ви можете зберегти старі бали у заголовку, прокресливши їх. Наприклад:
# Ruby, <s>104</s> <s>101</s> 96 bytes
10
, наприклад 21
, 25
і 30
не з’являється, наприклад.
k
ітерації, k
елемент елемента в масиві переноситься до 2k
го-го положення і більше не буде торкатися до тих пір, поки 2k
ітерація, в цей час вона переноситься на 4k
ту позицію, ad infinitum. Прем'єр не переміщується, поки не настане його черга, так би мовити, тому всі прайми переміщаються вперед. Але ми можемо легко скласти список невинних жертв, просто надрукувавши перший елемент, який слід перенести під час ітерації 2 та кожної непарної ітерації. Список йде: 2, 3, 5, 7, 10, 11, 13, 21, 17, 19, 30, 23, 27, 25, 29, 31, 45, 42, 37, 54, 41, 43, 65, ...