Zainspirowany to pytanie Math.SE .
tło
Fibonacciego (zwany F
) sekwencję rozpoczynając 0, 1
taki sposób, że każdy numer ( F(n)
) (po pierwszych dwóch) jest sumą dwóch przed nim ( F(n) = F(n-1) + F(n-2)
).
Sekwencja Fibonacciego mod K (nazywana M
) jest sekwencją liczb Fibonacciego mod K ( M(n) = F(n) % K
).
Można wykazać, że F Sekwencja Fibonacciego mod K jest cykliczna dla wszystkich K, ponieważ każda wartość jest określona przez poprzednią parę, i istnieje tylko K 2 możliwych par liczb całkowitych nieujemnych, obie mniejsze niż K. Ponieważ sekwencja Fibonacciego mod K jest cykliczny po pierwszej powtórzonej parze terminów, liczba, która nie pojawia się w modie F Sekwencji Fibonacciego, zanim pierwsza powtarzająca się para terminów nigdy się nie pojawi.
Dla K = 4
0 1 1 2 3 1 0 1 ...
Dla K = 8
0 1 1 2 3 5 0 5 5 2 7 1 0 1 ...
Zauważ, że dla K = 8, 4 i 6 nie pojawiają się przed powtórzeniem 0 1
, więc 4 i 6 nigdy nie pojawią się w Fibonacciego Modie 8.
Wyzwanie
Biorąc pod uwagę liczbę całkowitą K ściśle większą niż 0, wypisz wszystkie nieujemne liczby całkowite mniejsze niż K, które nie pojawiają się w modie Sekwencji Fibonacciego K.
Zasady
Możesz założyć, że K zmieści się w twoim rodzimym typie liczb całkowitych ( w granicach rozsądku ).
Jeśli istnieją liczby nieujemne mniejsze niż K, które nie pojawiają się w F Sekwencji Fibonacciego mod K, twój program / funkcja powinna wypisać wszystkie takie liczby w jakikolwiek rozsądny sposób.
Jeśli nie ma nieujemnych liczb całkowitych mniejszych niż K, które nie pojawiają się w modie Sekwencji Fibonacciego K, twój program / funkcja może to wskazać, zwracając pustą listę, nic nie drukując, powodując błąd itp.
Porządek nie ma znaczenia.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w każdym języku.
Przypadki testowe
Generuj przypadki testowe online!
Niepuste skrzynki testowe
8 [4, 6]
11 [4, 6, 7, 9]
12 [6]
13 [4, 6, 7, 9]
16 [4, 6, 10, 12, 14]
17 [6, 7, 10, 11]
18 [4, 6, 7, 9, 11, 12, 14]
19 [4, 6, 7, 9, 10, 12, 14]
21 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 19]
22 [4, 6, 7, 9, 15, 17, 18, 20]
23 [4, 7, 16, 19]
24 [4, 6, 9, 11, 12, 14, 15, 18, 19, 20, 22]
26 [4, 6, 7, 9, 17, 19, 20, 22]
28 [10, 12, 14, 16, 18, 19, 23]
29 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27]
31 [4, 6, 9, 12, 14, 15, 17, 18, 19, 22, 25, 29]
32 [4, 6, 10, 12, 14, 18, 20, 22, 26, 28, 30]
33 [4, 6, 7, 9, 15, 17, 18, 20, 24, 26, 27, 28, 29, 31]
34 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 30]
36 [4, 6, 7, 9, 10, 11, 12, 14, 16, 18, 20, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32]
37 [9, 10, 14, 17, 20, 23, 27, 28]
38 [4, 6, 7, 9, 10, 11, 12, 14, 15, 16, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 36]
39 [4, 6, 7, 9, 15, 17, 19, 20, 22, 24, 30, 32, 33, 35]
...
200 [4, 6, 12, 14, 20, 22, 28, 30, 36, 38, 44, 46, 52, 54, 60, 62, 68, 70, 76, 78, 84, 86, 92, 94, 100, 102, 108, 110, 116, 118, 124, 126, 132, 134, 140, 142, 148, 150, 156, 158, 164, 166, 172, 174, 180, 182, 188, 190, 196, 198]
...
300 [6, 18, 30, 42, 54, 66, 78, 90, 102, 114, 126, 138, 150, 162, 174, 186, 198, 210, 222, 234, 246, 258, 270, 282, 294]
...
400 [4, 6, 10, 12, 14, 20, 22, 26, 28, 30, 36, 38, 42, 44, 46, 52, 54, 58, 60, 62, 68, 70, 74, 76, 78, 84, 86, 90, 92, 94, 100, 102, 106, 108, 110, 116, 118, 122, 124, 126, 132, 134, 138, 140, 142, 148, 150, 154, 156, 158, 164, 166, 170, 172, 174, 180, 182, 186, 188, 190, 196, 198, 202, 204, 206, 212, 214, 218, 220, 222, 228, 230, 234, 236, 238, 244, 246, 250, 252, 254, 260, 262, 266, 268, 270, 276, 278, 282, 284, 286, 292, 294, 298, 300, 302, 308, 310, 314, 316, 318, 324, 326, 330, 332, 334, 340, 342, 346, 348, 350, 356, 358, 362, 364, 366, 372, 374, 378, 380, 382, 388, 390, 394, 396, 398]
...
Puste przypadki testowe (brak danych wyjściowych, błąd, pusta lista itp. Jest akceptowalnym wynikiem)
1, 2, 3, 4, 5, 6, 7, 9, 10, 14, 15, 20, 25, 27, 30, 35 ... 100 ...
Odpowiedzi:
Galaretka ,
98 bajtówWypróbuj online!
Na podstawie okresu pisano
p(n) <= 6n
z A001175 . Równieżp(n) <= 6n <= n^2
dlan >= 6
ip(n) <= n^2
dlan < 6
. Ten bajt uratował dzięki Dennis.źródło
²
powinien działać zamiast×6
.Haskell , 70 bajtów
Oszczędność pewnej ilości bajtów dzięki Esolanging Fruit
8 bajtów zapisanych dzięki Laikoni
Wypróbuj online!
źródło
read$show
działa zamiastfromInteger
w tym przypadku i zapisuje dwa bajty.zip[1..x^2]
do obcinania oszczędza więcej bajtów: Wypróbuj online!Perl 6 ,
43 42 3932 bajtówSprawdź to
Sprawdź to
Sprawdź to
Sprawdź to
Rozszerzony:
źródło
> <> , 48 bajtów
Wypróbuj online!
Pobiera dane wejściowe poprzez flagę -v.
Drukuje dużo nadmiarowych linii, ale wykonuje zadanie. Zasadniczo używa pierwszego wiersza do przechowywania zestawu liczb, które pojawiły się do tej pory w sekwencji.
Jak to działa:
źródło
Python 2 , 69 bajtów
Wypróbuj online!
źródło
MATL ,
1918 bajtówWypróbuj online!
-1 bajt dzięki Guiseppe.
źródło
X~
!Python 3 , 91 bajtów
Wypróbuj online!
źródło
Łuska ,
13 1210 bajtówDzięki @Zgarb za -2 bajty!
Drukuje pustą listę na wypadek, gdyby pojawiły się wszystkie liczby całkowite, spróbuj online!
Wyjaśnienie
źródło
U2
aby uzyskać najdłuższy prefiks, w którym żadna sąsiednia para się nie powtarza.Python 3 , 78 bajtów
Wypróbuj online!
Drukuje zestaw, więc wyjściem dla pustych przypadków testowych jest
set()
, który jest pustym zestawem.źródło
R
92 92bajtówDzięki @Giuseppe za zapisanie 6 bajtów!
Wypróbuj online!
Dość prosta implementacja ( poprzednia wersja , ale ta sama koncepcja):
źródło
setdiff
, dobry pomysł!1:k^2
podejście, z którego korzystają wszyscy inniPython 3,
173152143131 bajtówSpecjalne podziękowania dla @ovs.
Wypróbuj online
Jak to działa?
Pierwsza funkcja przyjmuje dwa parametry min, i zwraca n-tą liczbę Fibonacciego mod m. Druga funkcja zapętla mod Fibonacciego mod k i sprawdza, czy 0 i 1 są powtarzane. Przechowuje liczby na liście i porównuje je z listą zawierającą liczby 1-n. Zduplikowane numery są usuwane, a pozostałe numery są zwracane.
źródło
set()
i łańcuchowych porównań.05AB1E , 10 bajtów
Wypróbuj online!
-3 bajty dzięki Emignie.
źródło
Ruby , 47 bajtów
Wypróbuj online!
Chociaż wykorzystuje tę samą logikę, nie jest to oparte na odpowiedzi GB .
Wyjaśnienie:
źródło
Common Lisp, 106 bajtów
Wypróbuj online!
źródło
Pari / GP , 55 bajtów
Wypróbuj online!
źródło
Eliksir ,
148144 bajtówWypróbuj online!
Niezbyt konkurencyjna odpowiedź, ale gra w golfa była naprawdę fajna! Eliksir jest dość czytelnym językiem, ale wyjaśniono bałagan znaków na środku.
Wyjaśnienie to składa się z dwóch części: mod-fibonacci i operacji na nim
Mod-fib:
Zwraca to nieskończony strumień modów Fibonacciego
x
. Zaczyna się od akumulatora{1,1}
i stosuje następującą operację ad infinitum: dany akumulator{p,n}
, wyjściep mod x
do strumienia. Następnie ustaw akumulator na{n,p+n}
.Reszta:
źródło
SNOBOL4 (CSNOBOL4) , 153 bajty
Wypróbuj online!
źródło
Rubinowy ,
5553 bajtówWypróbuj online!
źródło
JavaScript (ES6), 84 bajtów
źródło
Python 3, 76 bajtów
Po prostu przegląda najdłuższy możliwy cykl liczb Fibonnaci (n ^ 2) i tworzy listę wszystkich liczb, które występują w tym czasie. Aby uprościć logikę, numery są przechowywane w module.
źródło