Wprowadzenie
Umieszczenie wszystkich liczb dodatnich w regularnej kolejności (1, 2, 3, ...) jest trochę nudne, prawda? Oto szereg wyzwań związanych z permutacjami (przetasowaniami) wszystkich liczb dodatnich.
Pierwszym wyzwaniem w tej serii jest wyprowadzenie a (n) dla danego n jako danych wejściowych, gdzie a (n) to A064413 , znany również jako sekwencja EKG, ponieważ wykres jego wartości przypomina elektrokardiogram (stąd „ Jak to robi czuć „ odniesienie). Ciekawe właściwości tej sekwencji polegają na tym, że wszystkie dodatnie liczby całkowite pojawiają się dokładnie raz. Kolejną godną uwagi cechą jest to, że wszystkie liczby pierwsze występują w porządku rosnącym.
Zadanie
Biorąc pod uwagę liczbę całkowitą n, wypisz a (n).
jest zdefiniowane jako:
- dla , ( n ) jest najmniejsza liczba nie jest jeszcze używany, który dzieli czynnikiem ( n - 1 )
Uwaga: tutaj zakłada się indeksowanie 1; możesz użyć indeksowania opartego na 0, więc itd. Podaj to w swojej odpowiedzi, jeśli zdecydujesz się na to.
Przypadki testowe
Input | Output
--------------
1 | 1
5 | 3
20 | 11
50 | 49
123 | 132
1234 | 1296
3000 | 3122
9999 | 10374
Zasady
- Dane wejściowe i wyjściowe są liczbami całkowitymi (twój program powinien co najmniej obsługiwać dane wejściowe i wyjściowe w zakresie od 1 do 32767)
- Niepoprawne dane wejściowe (liczby zmiennoprzecinkowe, łańcuchy, wartości ujemne itp.) Mogą prowadzić do nieprzewidzianych wyników, błędów lub (nie) zdefiniowanego zachowania.
- Obowiązują domyślne reguły we / wy .
- Domyślne luki są zabronione.
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach
Ostatnia uwaga
Zobacz to powiązane pytanie dotyczące PP&CG .
#>¹↑¡§ḟȯ←⌋→`-Nḣ2
i tutaj!¡§ḟȯ←⌋→`-Nḣ2
by to zrobiła ( Wypróbuj ). Definicja „duplikatu” nie jest „jest dokładnie taka sama jak”. Pozostawiam decyzję innym, ponieważ nie chcę wbijać tego zamkniętego, ponieważ mogłem coś przeoczyć.a(n)
Akcji czynnik inny niż 1 za(n-1)
, gdyż każdy udziałów numer 1 jako czynnika. Czy moja odpowiedź może brzmieć „indeksowane 2”, gdziea(2)
1,a(3)
2, itd.?Odpowiedzi:
05AB1E , 25 bajtów
0-indeksowane
Wyjaśnienie:
źródło
Haskell ,
66 6564 bajtówWypróbuj online!
źródło
Haskell , 60 bajtów
Wypróbuj online!
Zero indeksowane; może zapisać cztery bajty, jeśli seria zaczyna się od 2 (kinda (-1) -indexed, ale bez wartości -1). Tworzy nieskończoną listę, leniwie utrzymując listę nieużywanych liczb.
źródło
Data.List
i użyjeszdelete x
zamiastfilter(/=x)
. Jeśli to musi działać w przypadku dużych argumentów, taka optymalizacja szybko stanie się konieczna.delete
jest tutaj rozsądnym posunięciem, ale w grze w golfa nie obchodzi nas to. Czasami wspominam o bardziej wydajnych wariantach, gdy różnica jest spektakularna lub w inny sposób interesująca. Tutaj nie jest tak źle: TIO może obliczyć wszystkie przypadki testowe w mniej niż 10 sekund.Python 2 , 104 bajty
Korzysta z indeksowania opartego na 0.
Wypróbuj online!
źródło
Rubinowy, 86 bajtów
Działa to jednak wiecznie dla danych wejściowych już od 10.
Oto wersja z zapamiętywaniem ze 102 bajtami, która działa w akceptowalnym czasie:
źródło
JĘZYK MASZYNY (X86, 32 bity) + funkcje malloc () / free () biblioteki języka C, bajty 325
Powyżej gcd i funkcji ... Poniższy kod zestawu generuje funkcje i program testowy:
wyniki:
Możliwe błędy i błędne kopiowanie przeszłości ...
źródło
Perl 6,
848073695049 bajtów(0-indeksowane)
Dzięki tej odpowiedzi na kilka sztuczek.
Dzięki ASCII tylko za golenie bajtu.
źródło
...
? To sprawia, że takie sekwencje są o wiele łatwiejsze. Na przykładmy@a=1,2;push @a,operation while condition
możesz być1,2,{operation}...condition
. Przy kilku innych golfach może to być nawet 49 bajtów.first
.APL (NARS), znaki 119, bajty 238
ten test zajmuje 1m: 49s tutaj:
źródło
Java (JDK) ,
161155152151 bajtówZapisano bajt, przełączając
int[]
śledzenie, aby wykorzystać istniejąceBigInteger
!Wypróbuj online!
źródło
Gaia , 27 bajtów
Wypróbuj online!
Indeksowanie 1.
Działa raczej powoli, ponieważ wypróbowuje każdą liczbę całkowitą, aż znajdzie
a(n)
.źródło