Listas autolimitadas
Considere una lista no vacía L que contiene enteros no negativos. Una ejecución en L es una sublista contigua de elementos iguales, que no se puede alargar. Por ejemplo, las corridas de [0,0,1,1,3,3,3,2,1,1] son [0,0], [1,1], [3,3,3], [2 ], [1,1] . La lista L es autolimitada si para cada número entero N ≥ 1 , el número de ocurrencias de N es menor o igual que el número de corridas de N-1 . La lista anterior no es autolimitada, porque hay 4 ocurrencias de 1 , pero solo una ejecución de 0 s.
Aquí hay un ejemplo de una lista autolimitada: [0,0,3,4,1,0,2,1,1,0,2,1,0,0,0,1,0] . Tiene
- 5 carreras de 0 y 5 ocurrencias de 1 ,
- 4 carreras de 1 y 2 ocurrencias de 2 ,
- 2 carreras de 2 y 1 ocurrencia de 3 ,
- 1 corrida de 3 y 1 ocurrencia de 4 ,
- 1 corrida de 4 y no ocurrencias de 5 ,
- sin ocurrencias de otros enteros.
La tarea
Su tarea es decidir si una lista es autolimitada. Más explícitamente, su entrada será una lista no vacía de enteros no negativos. Si la lista es autolimitada, su salida será verdadera; de lo contrario, será falso. La entrada y salida pueden estar en cualquier formato razonable.
El conteo de bytes más bajo en cada lenguaje de programación es el ganador. Se aplican reglas estándar de código de golf .
Casos de prueba
Ejemplos de verdad:
[0]
[1,0]
[0,1,1,0,2]
[3,1,1,0,0,2,0,0]
[5,0,4,1,3,0,2,2,0,1,1,1,0]
[0,0,1,1,0,0,1,1,0,0,2,2,0,0]
[6,0,0,0,2,2,1,0,5,0,3,4,0,1,1,1]
[5,0,1,0,0,0,0,4,0,3,1,1,1,2,2,0,0,0,0,0]
[4,5,1,3,2,0,5,2,0,3,0,1,0,1,0,0,0,1,0,0,1,0,3,4,4,0,2,6,0,2,6]
[0,4,1,3,10,6,0,1,3,7,9,5,5,0,7,4,2,2,5,0,1,3,8,8,11,0,0,6,2,1,1,2,0,4]
Instancias falsas:
[2]
[1,1,0]
[0,0,1,1,1,0,0,2]
[0,1,0,1,1,2,2,3,0,0,4,6]
[1,1,2,1,2,0,2,0,3,0,0,2,2,1,2,3,2,0,1,1,1,0,0,3,3,0]
[3,4,1,0,0,0,5,5,0,2,2,0,0,0,0,0,2,0,1,1,0,4,3,5,4,3]
[1,0,0,0,2,5,3,1,1,0,3,3,1,3,5,4,0,4,0,0,2,0,2,1,1,5,0,0,2,4,4,0,2,0,1,4,4,2,3,3,5,3,4,0,2,0,5]
[4,3,1,0,0,4,6,6,1,0,1,2,1,3,0,1,0,2,0,3,4,0,2,1,1,3,0,2,2,2,0,5,5,0,5,2,5,5,0,4,3,2,3,1,1,3,5,1,4,1,6,2,6,2,4,0,4,0,4,5,3,3,0,0,6,1,0,0,0,6,2,1,0,1,2,6,2,4]
[5,1,1,1,0,2,0,6,1,0,2,1,2,2,5,3,1,0,0,0,3,2,3,0,1,1,0,1,0,1,1,2,0,6,4,1,2,1,1,6,4,1,2,2,4,0,1,2,2,1,3,0,1,2,0,0,0,2,0,2,2,0,1,0,0,1,3,0,0,0,6,2,0,1,0,1,2,1,1,1,0,4,0,0,5,2,0,0,0,4,1,2,2,2,2,0,5,3,2,4,5,0,5]
[2]
, pero esos casos deberían ser falsos, sí.Respuestas:
Perl 6 , 29 bytes
Pruébalo en línea!
Muy buen desafío para Perl 6. Utiliza el operador de subconjunto en Bolsas (conjuntos ponderados de enteros). Explicación:
fuente
JavaScript (ES6),
9289 bytesPruébalo en línea!
¿Cómo?
La matriz c [] se utiliza para almacenar tanto el número de ejecuciones como el número de ocurrencias de enteros. Las ejecuciones se almacenan en índices no negativos y las ocurrencias de enteros se almacenan en índices complementarios de 1 ( c [-1] = número de 0 's, c [-2] = número de 1 ' s, etc.).
Los índices negativos se guardan realmente como propiedades del objeto de matriz subyacente y .some () no itera sobre ellos.
fuente
Perl 5
-p
,494844 bytesPruébalo en línea!
fuente
Jalea , 10 bytes
Pruébalo en línea!
Cómo funciona
fuente
Jalea , 19 bytes
Pruébalo en línea!
fuente
Jalea , 17 bytes
Pruébalo en línea!
fuente
Python 3 , 94 bytes
Pruébalo en línea!
fuente
sum(1for ... if x==j!=y)
=>sum(x==j!=y for ...)
.Japt , 21 bytes
¡Pruébalo en línea!
fuente
Stax ,
139 bytesDennis encontró un algoritmo mucho mejor . Lo porté descaradamente a Stax.
Ejecútelo y depúrelo en línea
Desempaquetado, sin golf y comentado, así es como se ve.
Ejecute este
Vieja respuesta:
Ejecutar y depurarlo
Se itera sobre la entrada y verifica las condiciones:
> 0
?occurrences(element) >= runs(element - 1)
?Si alguna de estas condiciones es verdadera para un elemento, entonces ese elemento es compatible. Si todos los elementos cumplen, el resultado es
1
.Aquí está la representación comentada, desempaquetada, sin golf, del mismo programa.
Ejecute este
fuente
Haskell, 80 bytes
Pruébalo en línea!
fuente