La agrupación toma una lista y la divide en nuevas listas de elementos adyacentes iguales. Por ejemplo
[1,1,2,1,1] -> [[1,1],[2],[1,1]]
Si luego tomas la longitud de estos grupos, obtienes una nueva lista de enteros
[1,1,2,1,1] -> [2,1,2]
Su tarea es escribir un programa que tome una lista de enteros positivos y encuentre la cantidad de veces que puede agruparlo y extenderlo antes de que la lista resultante tenga un solo elemento. Por ejemplo, la lista [1,2,3,3,2,1]
puede reagruparse 4 veces
[1,2,3,3,2,1]
[1,1,2,1,1]
[2,1,2]
[1,1,1]
[3]
Este es el código de golf, por lo que las respuestas se puntuarán en bytes con menos bytes mejor.
Casos de prueba
[1,2,3,3,2,1] -> 4
[1,2,3,4,5,6,7] -> 2
[1,1,1,1,1,1] -> 1
[2] -> 0
[1,2,4] -> 2
[1,2,2,1,1,2] -> 4
[1,2,2,1,1,2,1,2,2] -> 5
[1] -> 0
code-golf
array-manipulation
Post Rock Garf Hunter
fuente
fuente
[1]
es una entrada válida y debe dar0
, ¿correcto?Respuestas:
Haskell, 49 bytes
Pruébalo en línea!
fuente
CJam , 18 bytes
Pruébalo en línea!
fuente
Japt , 12 bytes
¡Pruébelo en línea!
Explicación
La recursión es un enfoque realmente no convencional para Japt, pero parece ser 4 bytes más corto que la próxima alternativa ...
fuente
F.a()
aún es accesible a través del historial de revisiones. ¡Sin embargo, me encantaría ver a tu 14 byter!Brachylog , 12 bytes
Pruébalo en línea!
Explicación
fuente
C (gcc) , 108 bytes
Pruébalo en línea!
Explicación
Pruébalo en línea!
fuente
JavaScript (ES6),
676563 bytesPor extraño que parezca, JavaScript y Japt parecen tener el mismo algoritmo más corto por una vez ...
fuente
K (oK) ,
2019 bytesSolución:
Pruébalo en línea!
Ejemplos:
Explicación:
Este es bastante simple, aunque me pregunto si hay un enfoque aún mejor ... Encuentre los índices en los que difiere la entrada, divídalos en esos índices y luego cuente la longitud de cada sublista. Iterar hasta que los resultados converjan a 1.
Notas:
La siguiente solución de 14 bytes funciona para todos, excepto una lista de un solo elemento:
Pruébalo en línea!
fuente
J ,
2523 bytes1 byte guardado gracias a streetster
1 byte guardado gracias a FrownyFrog
Pruébalo en línea!
Solución inicial:
Pruébalo en línea!
Explicación
fuente
_2+
guardar un byte?#;.1@(0,2=/\])
ahorra 1 byte.Stax , 9 bytes
Ejecútelo y depúrelo en línea
La representación ascii del mismo programa es esta.
Esto utiliza una característica stax llamada generador que produce valor de acuerdo con la transformación y los bloques de filtro.
fuente
Python 2 , 84 bytes
Pruébalo en línea!
¿Cómo?
f
es una función recursiva que, si es su entrada,a
tiene una longitud de 2 o más (len(a)>1
) devuelve1+f(x)
* dondex
es la longitud del grupo dea
; mientras que si su entrada es de longitud 1 o 0 devuelveFalse
(igual a 0 en Python), esto se debe a que el lado derecho deland
no se evalúa cuando el izquierdo es falsey.*
-~f(x)
es-(-1 - f(x))
pero puede colindarse con loand
contrario1+f(x)
of(x)+1
)Las longitudes de grupo se calculan creando un código que luego se evalúa con
eval(...)
. El código creado es algo parecido a lo1,1,1+1+1,1,1+1,1,
que se evalúa como una tupla(1,1,3,1,2,1)
.El código se crea comprimiendo
a
ya
sin su encabezado (...for x, y in zip(a,a[1:])
haciendox
yy
cada uno de los pares adyacentes adentroa
. Si el par es igual sex==y
evalúa comoTrue
(1) de lo contrarioFalse
(0) - este resultado se usa para indexar en el,+
rendimiento de la cadena+
y,
respectivamente y cada el carácter resultante está precedido por un1
('1'+...
): todo el asunto tiene un final final1,
adjunto, por ejemplo, si asía
fuera[5,5,2,9,9,9]
, losx,y
pares estarían(5,5)(5,2)(2,9)(9,9)(9,9)
haciendo las igualdades que10011
los caracteres+,,++
, que con el1
s anterior se convierte1+1,1,1+1+
y el final final1,
la toma de1+1,1,1+1+1,
que se evalúa(2,1,3)
según sea necesario.Tenga en cuenta que el seguimiento
,
garantiza que una entrada con un solo grupo se evalúe como una tupla en lugar de un número entero (es decir,[3,3]
->1+1,
-> en(2)
lugar de[3,3]
->1+1
->2
)fuente
CJam , 19 bytes
Pruébalo en línea!
fuente
CJam , 20 bytes
Pruébalo en línea!
fuente
Perl 5 ,
53504945 bytesIncluye
+3
para-p
Dé la lista de números como una línea en STDIN
Pruébalo en línea!
fuente
Cáscara , 8 bytes
-1 byte gracias a @Zgarb!
Pruébalo en línea!
Explicación
fuente
←Vε
es una verificación más corta para encontrar el índice de la lista singleton.Jalea , 10 bytes
Pruébalo en línea!
fuente
[1]
. Debería poder solucionarlo utilizando dos colas / pops en lugar de_2
ÐĿ
no fue una buena opción en primer lugar ... lo reemplazó con un bucle while.05AB1E , 9 bytes
Pruébalo en línea!
Explicación
fuente
Wolfram Language (Mathematica) , 32 bytes
Guardado 2 bytes gracias a Martin Ender. Usando la codificación CP-1252, donde
±
hay un byte.Pruébalo en línea!
fuente
±{_}=0;±x_:=1+±(Length/@Split@x)
(suponiendoWindowsANSI
codificación)Ruby ,
54 56 5554 bytesPruébalo en línea!
fuente
SmileBASIC,
110108 bytesFunción de llamada como
R list,0
; la salida se imprime en la consola.fuente
Python 2 , 85 bytes
Pruébalo en línea!
fuente
R ,
5145 bytesPruébalo en línea!
Recurrentemente tome la longitud de la codificación de longitud de ejecución e incremente el contador.
fuente
Retina 0.8.2 , 31 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Si hay una coma, haremos otra iteración, así que agregue un carácter de conteo.
Reemplace cada ejecución con su longitud disminuida. Las etapas anteriores se repiten hasta que no quedan comas.
Cuenta el número de iteraciones.
fuente
Perl 6 , 52 bytes
Pruébalo
Expandido:
fuente
Brain-Flak , 78 bytes
Pruébalo en línea!
fuente
Pyth , 9 bytes
¡Banco de pruebas!
fuente
Kotlin , 123 bytes
Acepta
List<Int>
.Más legible:
Pruébalo en línea!
131 bytes, TIO
181 bytes, TIO
Incluye 39 para
import kotlin.coroutines.experimental.*
.fuente
Rojo , 140 bytes
Pruébalo en línea!
Solo quería darle otra oportunidad al dialecto de Red's Parse.
Sin golf
fuente