Oto jak zdefiniowano sekwencję Kolakoskiego (OEIS A000002 ):
Sekwencja Kolakoski jest sekwencją, która zawiera
1
i2
, an
th elementem tej sekwencji jest długośćn
th grupy równych elementów (przebiegów) w samej sekwencji. Pierwsze 20 elementów sekwencji i odpowiednie długości to:1 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1 - --- --- - - --- - --- --- - --- --- - 1 2 2 1 1 2 1 2 2 1 2 2 1
Zasadniczo długości grup równych elementów sekwencji Kolakoski to sama sekwencja Kolakoski.
Jak dotąd, tak dobrze, ale dlatego powinniśmy się ograniczać do 1
i 2
? Nie zamierzamy! Biorąc pod uwagę dwa dane wejściowe, tablicę dodatnich liczb całkowitych A
i liczbę całkowitą N
, zwracają pierwsze N
wyrażenia sekwencji podobnej do Kolakoskiego, zdefiniowane przez cykliczne przechodzenie A
. Aby lepiej to zrozumieć, oto sprawdzony przykład z długością nowo dodanych grup w nawiasach:
A = [2, 3, 1]
N = 25
2: [[2], 2 ]
3: [ 2 ,[2], 3 , 3 ]
1: [ 2 , 2 ,[3], 3 , 1 , 1 , 1 ]
2: [ 2 , 2 , 3 ,[3], 1 , 1 , 1 , 2 , 2 , 2 ]
3: [ 2 , 2 , 3 , 3 ,[1], 1 , 1 , 2 , 2 , 2 , 3 ]
1: [ 2 , 2 , 3 , 3 , 1 ,[1], 1 , 2 , 2 , 2 , 3 , 1 ]
2: [ 2 , 2 , 3 , 3 , 1 , 1 ,[1], 2 , 2 , 2 , 3 , 1 , 2 ]
3: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 ,[2], 2 , 2 , 3 , 1 , 2 , 3 , 3 ]
1: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 ,[2], 2 , 3 , 1 , 2 , 3 , 3 , 1 , 1 ]
2: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 ,[2], 3 , 1 , 2 , 3 , 3 , 1 , 1 , 2 , 2 ]
3: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 ,[3], 1 , 2 , 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 ]
1: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 ,[1], 2 , 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 , 1 ]
2: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 1 ,[2], 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 , 1 , 2 , 2 ]
C: [ 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 , 2 , 3 , 1 , 2 , 3 , 3 , 1 , 1 , 2 , 2 , 3 , 3 , 3 , 1 , 2 , 2 ]
Oto kolejny sprawdzony przykład z wiodącym 1
:
A = [1, 2, 3]
N = 10
1: [[1]]
2: [ 1 ,[2], 2 ]
3: [ 1 , 2 ,[2], 3 , 3 ]
1: [ 1 , 2 , 2 ,[3], 3 , 1 , 1 , 1 ]
2: [ 1 , 2 , 2 , 3 ,[3], 1 , 1 , 1 , 2 , 2 , 2 ]
C: [ 1 , 2 , 2 , 3 , 3 , 1 , 1 , 1 , 2 , 2 ]
Jak widać powyżej, wynik końcowy został przycięty do N = 10
elementów. Elementem n
tym powinna być długość grupy n
równych elementów, nawet jeśli sam element należy do grupy, do której się odnosi. Podobnie jak w powyższym przypadku, pierwsza 1
odnosi się do pierwszej takiej grupy, która jest właśnie taka 1
, a pierwsza 2
odnosi się do drugiej takiej grupy, która zaczyna się od niej.
Zasady
- Możesz założyć, że
A
nigdy nie będzie mieć dwóch lub więcej równych elementów.A
mogą zawierać całkowitą więcej niż jeden raz, a pierwsze i ostatnie elementy nie są takie same, iA
zawiera co najmniej 2 elementy (np[1, 2, 2, 3]
,[2, 4, 3, 1, 2]
i[3]
nie będzie podane). Jest tak, ponieważ gdyby istniały kolejne równe elementy, końcowy wynik byłby nieprawidłowym prefiksem dla takiej sekwencji. - Możesz założyć, że
A
zawiera tylko dodatnie liczby całkowite (ponieważ taka sekwencja byłaby w przeciwnym razie nieokreślona). - Możesz założyć, że
N
jest nieujemną liczbą całkowitą (N >= 0
). - Nie możesz zwrócić więcej warunków niż zażądano.
- Korzystanie ze standardowych luk jest surowo zabronione.
- Możesz użyć dowolnej rozsądnej metody We / Wy .
- Twoja odpowiedź nie musi działać poza naturalnymi ograniczeniami języka, ale teoretycznie algorytm powinien działać dla dowolnie dużych danych wejściowych i liczb całkowitych .
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź.
Przypadki testowe
[5, 1, 2], 0 -> []
[2, 3, 1], 25 -> [2, 2, 3, 3, 1, 1, 1, 2, 2, 2, 3, 1, 2, 3, 3, 1, 1, 2, 2, 3, 3, 3, 1, 2, 2]
[1, 2, 3], 10 -> [1, 2, 2, 3, 3, 1, 1, 1, 2, 2]
[1, 2], 20 -> [1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 2, 1, 1, 2, 2, 1]
[1, 3], 20 -> [1, 3, 3, 3, 1, 1, 1, 3, 3, 3, 1, 3, 1, 3, 3, 3, 1, 1, 1, 3]
[2, 3], 50 -> [2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 2, 2, 2, 3, 3]
[7, 4], 99 -> [7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 7, 7, 7, 7, 7, 7, 7, 4]
[1, 2, 3], 5 -> [1, 2, 2, 3, 3]
[2, 1, 3, 1], 2 -> [2, 2]
[1, 3, 5], 2 -> [1, 3]
[2, 3, 2, 4], 10 -> [2, 2, 3, 3, 2, 2, 2, 4, 4, 4]
źródło
Odpowiedzi:
Łuska , 8 bajtów
Najpierw bierze długość, potem listę. Wypróbuj online!
Wyjaśnienie
źródło
Pyth, 14 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
Wyjaśnienie:
źródło
u&VSvzs*V]M*Ql
Java 8,
151 + 19119115 bajtówWypróbuj online!
źródło
&&
się&
i usuwania przecinek:a->n->{int c=0,l[]=new int[n],i=0,j;for(;i<n;i++)for(j=0;j<(c==i?a[i]:l[i])&c<n;j++)l[c++]=a[i%a.length];return l;}
( 115 bajtów )(c==i?a:l)[i]
zamiastc==i?a[i]:l[i]
R ,
120114108 bajtów-6 bajtów dzięki plannapusowi
Wypróbuj online!
Funkcja anonimowa; kolejno odwraca RLE zastępując długości
a[[1]]
z odwróconym RLE, a wartościa[[2]]
zA
replikacji o długości równej liczbiea$l
.źródło
a$l
aa$v
jeśli nie będą istnieć, ale nie wpłyną na wywołanieinverse.rle
, powodując nieskończoną pętlę. Myślę, że mogę używać tylkoa$l
wwhile
stanie irep
stanie.Haskell , 68 bajtów
Ogromne podziękowania dla Laikoni i flawr za ich pomoc w debugowaniu i grze w golfa w odpowiedzi na czacie PPCG Haskell, Of Monads and Men . Zapraszamy do gry w golfa! Wypróbuj online!
Pierwszy wiersz jest funkcją anonimową. Druga linia to nieskończone rozumienie listy, które tworzy naszą sekwencję podobną do Kolakoskiego.
Wyjaśnienie
Po pierwsze, określamy
z
jako szefa
za@(z:_)
. Następnie inicjujemy sekwencję za pomocą(z<$[1..z])
.Następnie z
1
rdo i<-[1..]
, to dołączenie następuje na sekwencji:cycle a!!i<$[1..f a!!i]
, który jesti
-ty członkiema
(cyklicznie bez końca) dołączonyf a!!i
razy.Wreszcie, anonimowa funkcja bierze po prostu pierwsze
n
warunki naszej sekwencji podobnej do Kolaskoskiego.źródło
Python 2 , 123 bajty
Wypróbuj online!
źródło