Así es como se define la secuencia de Kolakoski (OEIS A000002 ):
La secuencia de Kolakoski es una secuencia que contiene
1y2, y elnelemento th de la secuencia es la longitud delngrupo th de elementos iguales (ejecución) en la secuencia misma. Los primeros 20 términos de la secuencia y las longitudes respectivas son: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 1Esencialmente, la longitud de los grupos de elementos iguales de la secuencia de Kolakoski es la secuencia de Kolakoski misma.
Hasta ahora, todo bien, pero ¿por qué deberíamos restringirnos a 1y 2? ¡No vamos a hacerlo! Dadas dos entradas, una matriz de enteros positivos Ay un entero N, devuelven los primeros Ntérminos de la secuencia similar a Kolakoski definida por el ciclo A. Para comprenderlo mejor, aquí hay un ejemplo trabajado con las longitudes de los grupos recién agregados entre paréntesis:
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 ]
Aquí hay otro ejemplo trabajado con un líder 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 ]
Como puede ver arriba, el resultado final se cortó en N = 10elementos. El nelemento th debe ser la longitud del ngrupo de elementos iguales th, incluso si el elemento en sí pertenece al grupo al que se refiere. Como en el caso anterior, el primero se 1refiere al primer grupo, que es solo eso 1, y el primero se 2refiere al segundo grupo, que comienza con él.
Reglas
- Puede suponer que
Anunca tendrá dos o más elementos iguales consecutivos.Apuede contener un número entero más de una vez, pero el primer y el último elemento no serán iguales yAcontendrán al menos 2 elementos (por ejemplo[1, 2, 2, 3],[2, 4, 3, 1, 2]y[3]no se darán). Eso es porque si hubiera elementos iguales consecutivos, el resultado final habría sido un prefijo inválido para tal secuencia. - Puede suponer que
Asolo contiene enteros positivos (ya que, de lo contrario, dicha secuencia no estaría definida). - Puede suponer que
Nes un entero no negativo (N >= 0). - No puede devolver más términos de los solicitados.
- El uso de cualquiera de las lagunas estándar está estrictamente prohibido.
- Puede usar cualquier método de E / S razonable .
- Su respuesta no tiene que funcionar más allá de los límites del lenguaje natural, pero en teoría su algoritmo debería funcionar para entradas y números enteros arbitrariamente grandes .
- Este es el código de golf , por lo que gana la respuesta más corta.
Casos de prueba
[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]
fuente

Respuestas:
Casco , 8 bytes
Primero toma la longitud, luego la lista. Pruébalo en línea!
Explicación
fuente
Pyth, 14 bytes
Pruébelo en línea: conjunto de demostración o prueba
Explicación:
fuente
u&VSvzs*V]M*QlJava 8,
151 +19119115bytesPruébalo en línea!
fuente
&&a&y la eliminación de una coma: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]lugar dec==i?a[i]:l[i]R ,
120114108 bytes-6 bytes gracias a plannapus
Pruébalo en línea!
Función anónima; invierte sucesivamente el RLE, reemplazando las longitudes
a[[1]]con el RLE invertido, y los valoresa[[2]]conAreplicados a una longitud igual a la dea$l.fuente
a$lya$vsi no existen, pero no afectarán la llamada ainverse.rle, causando un bucle infinito. Creo que solo puedo usara$len lawhilecondición y larepcondición.Haskell , 68 bytes
Muchas gracias a Laikoni y flawr por su ayuda en la depuración y el golf de esta respuesta en la sala de chat PPCG Haskell, Of Monads and Men . Sugerencias de golf bienvenidas! Pruébalo en línea!
La primera línea es una función anónima. La segunda línea es la comprensión de la lista infinita que produce nuestra secuencia tipo Kolakoski.
Explicación
Primero, definimos
zcomo la cabeza deacona@(z:_). Luego, inicializamos la secuencia con(z<$[1..z]).Entonces, de en
1adelante,do i<-[1..]agregamos lo siguiente a la secuencia:,cycle a!!i<$[1..f a!!i]que es elimiembro número-ena(agregado de manera indefinida) enf a!!itiempos.Finalmente, la función anónima simplemente toma los primeros
ntérminos de nuestra secuencia similar a Kolaskoski.fuente
Python 2 , 123 bytes
Pruébalo en línea!
fuente