So wird die Kolakoski-Sequenz (OEIS A000002 ) definiert:
Die Kolakoski-Folge ist eine Folge, die
1
und enthält2
, und dasn
dritte Element der Folge ist die Länge dern
dritten Gruppe gleicher Elemente (Lauf) in der Folge selbst. Die ersten 20 Terme der Sequenz und die jeweiligen Längen sind: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
Im Wesentlichen ist die Länge der Gruppen gleicher Elemente der Kolakoski-Sequenz die Kolakoski-Sequenz selbst.
So weit, so gut, aber warum sollten wir uns auf 1
und beschränken 2
? Wir werden nicht! Bei zwei Eingaben, einer Reihe positiver Ganzzahlen A
und einer ganzen Zahl N
, werden die ersten N
Terme der Kolakoski-ähnlichen Sequenz zurückgegeben, die durch Durchlaufen definiert werden A
. Um es besser zu verstehen, ist hier ein Beispiel mit den Längen der neu hinzugefügten Gruppen in Klammern:
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 ]
Hier ist ein weiteres Beispiel mit einem führenden 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 ]
Wie Sie oben sehen können, wurde das Endergebnis in N = 10
Elemente geschnitten . Das n
th-Element sollte sein, wie lang die n
th-Equal-Element-Gruppe ist, auch wenn das Element selbst zu der Gruppe gehört, auf die es verweist. Wie im obigen Fall 1
bezieht sich der erste auf die erste solche Gruppe, die genau das ist 1
, und der erste 2
bezieht sich auf die zweite solche Gruppe, die damit beginnt.
Regeln
- Sie können davon ausgehen, dass
A
niemals zwei oder mehr aufeinanderfolgende gleiche Elemente vorhanden sind.A
enthalten kann , sobald eine ganze Zahl größer als, aber die ersten und letzten Elemente werden nicht gleich sein, undA
mindestens 2 Elemente enthält ( zum Beispiel[1, 2, 2, 3]
,[2, 4, 3, 1, 2]
und[3]
sind nicht gegeben werde werden). Dies liegt daran, dass bei aufeinanderfolgenden gleichen Elementen das Endergebnis ein ungültiges Präfix für eine solche Sequenz gewesen wäre. - Sie können davon ausgehen, dass
A
nur positive ganze Zahlen enthalten sind (da eine solche Sequenz ansonsten undefiniert wäre). - Sie können davon ausgehen, dass
N
es sich um eine nicht negative Ganzzahl (N >= 0
) handelt. - Sie können nicht mehr Bedingungen als angefordert zurückgeben.
- Die Verwendung einer der Standardlücken ist strengstens untersagt.
- Sie können jede vernünftige E / A-Methode verwenden .
- Ihre Antwort muss nicht über die Grenzen der natürlichen Sprache hinaus funktionieren, theoretisch sollte Ihr Algorithmus jedoch für beliebig große Eingaben und ganze Zahlen funktionieren .
- Das ist Code-Golf , also gewinnt die kürzeste Antwort.
Testfälle
[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]
quelle
Antworten:
Schale , 8 Bytes
Nimmt zuerst die Länge, dann die Liste. Probieren Sie es online!
Erläuterung
quelle
Pyth, 14 Bytes
Probieren Sie es online aus: Demo oder Testsuite
Erläuterung:
quelle
u&VSvzs*V]M*Ql
Java 8,
151 + 19119115 BytesProbieren Sie es online!
quelle
&&
auf&
und ein Komma zu entfernen: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 Bytes )(c==i?a:l)[i]
stattdessen vorc==i?a[i]:l[i]
R ,
120114108 Bytes-6 Bytes dank Plannapus
Probieren Sie es online!
Anonyme Funktion;
a[[1]]
Invertiert nacheinander den RLE, wobei die Längen durch den invertierten RLE ersetzt werden und die Wertea[[2]]
mitA
auf eine Länge repliziert werden, die der von entsprichta$l
.quelle
a$l
unda$v
wenn es nicht vorhanden ist, sie den Aufruf von nicht beeinflusseninverse.rle
und eine Endlosschleife verursachen. Ich denke, ich kann nura$l
in derwhile
Bedingung und derrep
Bedingung verwenden.Haskell , 68 Bytes
Vielen Dank an Laikoni und flawr für ihre Hilfe beim Debuggen und Golfen dieser Antwort im Chatroom von PPCG Haskell, Of Monads and Men . Golfvorschläge willkommen! Probieren Sie es online!
Die erste Zeile ist eine anonyme Funktion. Die zweite Zeile ist das unendliche Listenverständnis, das unsere Kolakoski-ähnliche Sequenz erzeugt.
Erläuterung
Zunächst definieren wir
z
als Kopf vona
mita@(z:_)
. Dann initialisieren wir die Sequenz mit(z<$[1..z])
.Von nun
1
ando i<-[1..]
hängen wir Folgendes an die Sequenz an: Diescycle a!!i<$[1..f a!!i]
ist dasi
-te Mitglied dera
(auf unbestimmte Zeit durchgeführten) angehängtenf a!!i
Zeiten.Schließlich übernimmt die anonyme Funktion einfach die ersten
n
Terme unserer Kolaskoski-ähnlichen Sequenz.quelle
Python 2 , 123 Bytes
Probieren Sie es online!
quelle