Te numery Shotgun to sekwencja o dość prostej definicji, ale jakiejś ciekawej strukturze. Zacznij od liczb naturalnych:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
Teraz weź wszystkie liczby według wskaźników podzielnych przez 2 , zgrupuj je w pary i zamień liczby w każdej parze:
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, ...
Teraz zrób to samo z indeksami podzielnymi przez 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, ...
A następnie dla 4 , 5 , 6 i tak dalej:
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, ...
...
Po k takich kroków pierwsze liczby k + 1 zostaną naprawione. Możemy więc zdefiniować nieskończoną sekwencję liczb Strzelby jako granicę pozwalającą k przejść do nieskończoności. Pierwsze 66 liczb to:
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, ...
Ciekawostka: pomimo tego, że uzyskano ją przez permutację liczb naturalnych, sekwencja nie zawiera liczb pierwszych.
Wyzwanie
Biorąc pod uwagę liczbę całkowitą n > 0
, znajdź n
numer Strzelby. Możesz napisać program lub funkcję, przyjmując dane wejściowe przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji i zwrócić wynik lub wydrukować go do STDOUT (lub najbliższej alternatywy).
To jest kod golfowy, więc wygrywa najkrótsze przesłanie (w bajtach).
Liderów
Otrzymuję więcej odpowiedzi, niż myślałem, a także kilka osób konkurujących w tym samym języku. Oto fragment kodu, który pozwala wygenerować zarówno zwykłą tabelę wyników, jak i przegląd zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
10
, 21
, 25
i 30
nie pojawiają się też, na przykład.
k
iteracji k
element th w tablicy jest transponowany do 2k
pozycji th i nie zostanie dotknięty ponownie aż do 2k
iteracji, kiedy to zostanie transponowany do 4k
pozycji ad ad infinitum. Liczba pierwsza nie zostanie transponowana, dopóki nie nadejdzie jej kolej, że tak powiem, więc wszystkie liczby pierwsze zostaną przesunięte do przodu. Ale możemy z łatwością sporządzić listę niewinnych ofiar, po prostu drukując pierwszy element do transpozycji w iteracji 2 i każdej nieparzystej iteracji. Lista obejmuje: 2, 3, 5, 7, 10, 11, 13, 21, 17, 19, 30, 23, 27, 25, 29, 31, 45, 42, 37, 54, 41, 43, 65, ...