C'est ainsi que la séquence de Kolakoski (OEIS A000002 ) est définie:
La séquence de Kolakoski est une séquence qui contient
1
et2
, et len
e élément de la séquence est la longueur dun
e groupe d'éléments égaux (run) dans la séquence elle-même. Les 20 premiers termes de la séquence et les longueurs respectives sont: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
Essentiellement, la longueur des groupes d'éléments égaux de la séquence de Kolakoski est la séquence de Kolakoski elle-même.
Jusqu'ici, tout va bien, mais pourquoi devrions-nous nous limiter à 1
et 2
? On ne va pas! Étant donné deux entrées, un tableau d'entiers positifs A
et un entier N
, retourne les premiers N
termes de la séquence de type Kolakoski définie par cyclage A
. Pour mieux comprendre, voici un exemple travaillé avec les longueurs des groupes nouvellement ajoutés entre parenthèses:
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 ]
Voici un autre exemple travaillé avec un leader 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 ]
Comme vous pouvez le voir ci-dessus, le résultat final a été coupé en N = 10
éléments. Le n
e élément doit être la longueur du n
e groupe d'éléments égaux, même si l'élément lui-même appartient au groupe auquel il se réfère. Comme dans le cas ci-dessus, le premier se 1
réfère au premier de ces groupes qui n'est que cela 1
, et le premier se 2
réfère au deuxième de ces groupes, qui commence par lui.
Règles
- Vous pouvez supposer qu'il
A
n'aura jamais deux ou plusieurs éléments égaux consécutifs.A
peut contenir un entier plus d'une fois, mais les premier et dernier éléments ne seront pas égaux etA
contiendront au moins 2 éléments (par exemple[1, 2, 2, 3]
,[2, 4, 3, 1, 2]
et[3]
ne seront pas donnés). En effet, s'il y avait des éléments égaux consécutifs, le résultat final aurait été un préfixe non valide pour une telle séquence. - Vous pouvez supposer
A
que ne contient que des entiers positifs (car une telle séquence ne serait pas définie autrement). - Vous pouvez supposer qu'il
N
s'agit d'un entier non négatif (N >= 0
). - Vous ne pouvez pas renvoyer plus de termes que demandé.
- L'utilisation de l'une des failles standard est strictement interdite.
- Vous pouvez utiliser n'importe quelle méthode d'E / S raisonnable .
- Votre réponse ne doit pas fonctionner au-delà des limites du langage naturel, mais en théorie, votre algorithme devrait fonctionner pour des entrées et des entiers arbitrairement grands .
- C'est le golf de code , donc la réponse la plus courte l'emporte.
Cas de test
[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]
la source
Réponses:
Husk , 8 octets
Prend d'abord la longueur, puis la liste. Essayez-le en ligne!
Explication
la source
Pyth, 14 octets
Essayez-le en ligne: démonstration ou suite de tests
Explication:
la source
u&VSvzs*V]M*Ql
Java 8,
151 +19119115octetsEssayez-le en ligne!
la source
&&
pour&
et la suppression d' une virgule: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 octets )(c==i?a:l)[i]
au lieu dec==i?a[i]:l[i]
R ,
120114108 octets-6 octets grâce à plannapus
Essayez-le en ligne!
Fonction anonyme; Inverse successivement le RLE, en remplaçant les longueurs
a[[1]]
par le RLE inversé, et les valeursa[[2]]
avecA
répliquées à une longueur égale à celle dea$l
.la source
a$l
eta$v
s'ils n'existent pas, mais ils n'affecteront pas l'appel àinverse.rle
, provoquant une boucle infinie. Je pense que je ne peux l'utiliser quea$l
dans l'while
état et l'rep
état.Haskell , 68 octets
Un grand merci à Laikoni et flawr pour leur aide dans le débogage et le golf de cette réponse dans le salon de discussion PPCG Haskell, Of Monads and Men . Suggestions de golf bienvenues! Essayez-le en ligne!
La première ligne est une fonction anonyme. La deuxième ligne est la compréhension de la liste infinie qui produit notre séquence de type Kolakoski.
Explication
Tout d'abord, nous définissons
z
comme la tête dea
aveca@(z:_)
. Ensuite, nous initialisons la séquence avec(z<$[1..z])
.Ensuite, à
1
partir de maintenant,do i<-[1..]
nous ajoutons ce qui suit à la séquence :,cycle a!!i<$[1..f a!!i]
qui est lei
-ième membre des tempsa
ajoutés (cyclés indéfiniment)f a!!i
.Enfin, la fonction anonyme reprend simplement les premiers
n
termes de notre séquence de type Kolaskoski.la source
Python 2 , 123 octets
Essayez-le en ligne!
la source