Así es como se define la secuencia de Kolakoski (OEIS A000002 ):
La secuencia de Kolakoski es una secuencia que contiene
1
y2
, y eln
elemento th de la secuencia es la longitud deln
grupo 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 1
Esencialmente, 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 1
y 2
? ¡No vamos a hacerlo! Dadas dos entradas, una matriz de enteros positivos A
y un entero N
, devuelven los primeros N
té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 = 10
elementos. El n
elemento th debe ser la longitud del n
grupo 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 1
refiere al primer grupo, que es solo eso 1
, y el primero se 2
refiere al segundo grupo, que comienza con él.
Reglas
- Puede suponer que
A
nunca tendrá dos o más elementos iguales consecutivos.A
puede contener un número entero más de una vez, pero el primer y el último elemento no serán iguales yA
contendrá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
A
solo contiene enteros positivos (ya que, de lo contrario, dicha secuencia no estaría definida). - Puede suponer que
N
es 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*Ql
Java 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]]
conA
replicados a una longitud igual a la dea$l
.fuente
a$l
ya$v
si no existen, pero no afectarán la llamada ainverse.rle
, causando un bucle infinito. Creo que solo puedo usara$l
en lawhile
condición y larep
condició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
z
como la cabeza dea
cona@(z:_)
. Luego, inicializamos la secuencia con(z<$[1..z])
.Entonces, de en
1
adelante,do i<-[1..]
agregamos lo siguiente a la secuencia:,cycle a!!i<$[1..f a!!i]
que es eli
miembro número-ena
(agregado de manera indefinida) enf a!!i
tiempos.Finalmente, la función anónima simplemente toma los primeros
n
términos de nuestra secuencia similar a Kolaskoski.fuente
Python 2 , 123 bytes
Pruébalo en línea!
fuente