Wprowadzenie
Sekwencja EKG zaczyna się od 1 i 2, a następnie reguła jest taka, że następny warunek jest najmniejszą dodatnią liczbą całkowitą, która nie jest jeszcze w sekwencji i której wspólny czynnik z ostatnim terminem jest większy niż 1 (nie są koprime).
Pierwsze warunki to:
1, 2, 4, 6, 3, 9, 12, 8, 10, 5, 15, ...
Nazywa się EKG, ponieważ wykres jego warunków jest dość podobny do EKG.
Jest to sekwencja A064413 w OEIS .
Wyzwanie
Musisz napisać funkcję, która przyjmuje liczbę całkowitą n jako dane wejściowe i wyjściowe, o ile n pierwszych składników sekwencji jest większych niż n .
Ponieważ reguła sekwencji zaczyna się od trzeciego członu, wejściowa liczba całkowita musi być większa lub równa 3. Na przykład, dane wejściowe dają 10
wynik, 1
ponieważ siódmy człon jest 12
i żaden z pozostałych dziesięciu pierwszych członów nie przekracza 10.
Przypadki testowe
3 -> 1
10 -> 1
100 -> 9
1000 -> 70
Zasady
- W przypadku liczb całkowitych niższych niż 3 funkcja może wygenerować 0 lub kod błędu.
- Żadnych innych szczególnych zasad z wyjątkiem: to jest golf golfowy, im krótszy, tym lepiej!
1
czym jest to 0 wyraz sekwencji, a zatem, na przykład,15
10 wyraz, a nie5
?Odpowiedzi:
Galaretka ,
201918 bajtówTo jest pełny program.
Wypróbuj online!
Jak to działa
Zauważ, że wygenerowana sekwencja to . Ponieważ wywołanie linii pomocniczej razy generuje sekwencję o długości , jest praktycznie ignorowane.[ 1 , 0 , 2 , 4 , 6 , 3 , 9 , 12 , 8 , 10 , 5 , 15 , … ] n n + 1 0
źródło
Perl 6 ,
66635958 bajtów-4 bajty dzięki Jo King
Wypróbuj online!
Zbyt wolne dla TIO dla n = 1000.
źródło
first &f,1..*
można to przepisać+(1...&f)
, Twoja sztuczka skrzyżowania pomogła.JavaScript (ES6),
107106105 bajtówWypróbuj online!
W jaki sposób?
Funkcja pomocnicza zwraca wartość true, jeśli dwie podane liczby całkowite nie są koprime:do
Tablica jest inicjowana na i przechowuje wszystkie napotkane do tej pory wartości w odwrotnej kolejności. Dlatego ostatnią wartością jest zawsze .za [ 2 , 1 ] a [ 0 ]
Aby wiedzieć, czy kwalifikuje się jako następny termin sekwencji, sprawdzamy, czy następujące wyrażenie jest równe :k 0
a.indexOf(k)
jest równy albo:a.indexOf(k) + C(k, a[0])
źródło
Haskell,
8982 bajtówEdycja: -7 bajtów dzięki @ H.PWiz
Wypróbuj online!
źródło
Łuska , 16 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
MATL , 29 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
GE:
)?while
APL (Dyalog Unicode) , 39 bajtów SBCS
-2 bajty dzięki ngn, -1 bajt przy użyciu właściwego sprawdzania warunkowego.
Wypróbuj online!
źródło
⍣
przekazuje swój lewy argument do funkcji operandu, więc nie ma takiej potrzeby∘
. także⍵
nie będzie wiązać się z rzeczą po prawej, ponieważ zaczyna się od funkcji (⍳
), więc nie ma takiej potrzeby⊢
.JavaScript,
939187 bajtówZgłasza błąd przepełnienia dla
0
lub1
, wyniki0
dla2
.Wypróbuj online
źródło
APL (NARS), znaki 121, bajty 242
przetestuj tutaj w czasie krótszym niż minuta:
Naturalnie nie ma sprawdzania typu i zasięgu ...
źródło
Japt,
2321 bajtówSpróbuj
źródło
Python 3 , 153 bajty
Wypróbuj online! (Ostrzeżenie: ocena zajmuje około 30 sekund)
źródło