Dada una lista de enteros no negativos en cualquier formato razonable, repítelo, omitiendo tantos elementos como dice cada entero que pisas.
Aquí hay un ejemplo trabajado:
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | []
^ First element, always include it
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0]
^ Skip 0 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1]
^ Skip 1 element
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2]
^ Skip 2 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2, 3]
Skip 3 elements; you're done
Otro ejemplo trabajado, no tan deltas iguales:
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | []
^ First element, always include it
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4]
^ Skip 4 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3]
^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3]
^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3, 4]
Skip 4 elements; you're done
Un ejemplo fuera de límites:
[0, 2, 0, 2, 4, 1, 2] | []
^ First element, always include it
[0, 2, 0, 2, 4, 1, 2] | [0]
^ Skip 0 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2]
^ Skip 2 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2, 4]
Skip 4 elements; you're done (out of bounds)
Reglas
- No puede usar ningún truco aburrido entre estos , hacen que el desafío sea aburrido y sin interés.
- Solo debe devolver / imprimir el resultado final. La salida STDERR se ignora.
- No puede obtener la entrada como una cadena de dígitos en ninguna base (por ejemplo, "0102513162" para el primer caso).
- Debe usar el orden de izquierda a derecha para la entrada.
- Como en los ejemplos trabajados, si sale de los límites, la ejecución termina como si no fuera así.
- Debe usar
0
para omitir 0 elementos. - Dada la lista vacía (
[]
) como entrada, debe regresar[]
.
Casos de prueba
[] => []
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => [0, 1, 3, 7]
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0] => [5, 2, 1, 0]
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] => [0, 1, 2, 3]
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] => [4, 3, 3, 4]
[0, 2, 0, 2, 4, 1, 2] => [0, 2, 4]
Este es el código de golf , por lo que gana la respuesta más corta.
code-golf
array-manipulation
Erik el Outgolfer
fuente
fuente
""
s finales ?0
s al final en la salida.Respuestas:
Python 2 , 36 bytes
Pruébalo en línea!
fuente
x[0]
lugar dex[:1]
?[x[0]]
x[:1]
todos modos ...f=lambda x:x and[x[0]]+f(x[x[0]+1:])
Python 2 ,
49 44 *41 bytesTachado 44 sigue siendo regular 44 :(
* -3 gracias a @ ASCII-only .
Pruébalo en línea!
Imprime los resultados separados por una nueva línea, como lo permitió el OP en el chat. No creo que pueda acortarse como un programa completo no recursivo .
¿Como funciona esto?
l=input()
- Lee la lista de la entrada estándar.while l:
- Abusa del hecho de que las listas vacías son falsas en Python, se repite hasta que la lista está vacía.print l[0];
- Imprime el primer elemento de la lista.l=l[l[0]+1:]
- "Salta como un conejo" - Recorta el primerol[0]+1
de la lista.Tomemos un ejemplo.
Teniendo en cuenta la lista
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]
como entrada, los realiza el código de la siguiente (de acuerdo con la explicación anterior) - imprime el primer elemento de la matriz:5
, recortar la primera 6:[2, 1, 2, 1, 0, 0]
. A continuación, imprimir2
y recortar el primer 3:[1,0,0]
. Del mismo modo, sacamos1
, recortamos los primeros 2 y obtenemos[0]
. Por supuesto,0
se imprime y el programa termina.fuente
Haskell,
29 2726 bytesGuardado 1 byte gracias a Zgarb.
Pruébalo en línea.
fuente
f x=x
en la segunda línea guarda un byte.JavaScript (ES6),
423935 bytesSolución anterior 39 bytes
-3 bytes gracias a @ThePirateBay
fuente
a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r
05AB1E ,
109 bytesUtiliza la codificación 05AB1E . Pruébalo en línea!
fuente
Mathematica,
4644 bytesAlternativas:
fuente
C #, 68 bytes
Pruébalo en línea!
Versión completa / formateada:
Devolver una lista es más largo en 107 bytes.
fuente
Casco ,
86 bytesPruébalo en línea!
-2 bytes (y una idea de solución completamente nueva) gracias a Leo!
Explicación
Estoy usando la función de coincidencia de patrón de lista
Γ
. Toma una funciónf
y una lista con cabezax
y colaxs
, y se aplicaf
ax
yxs
. Si la lista está vacía,Γ
devuelve un valor predeterminado consistente con su tipo, en este caso una lista vacía. Tomamosf
ser↓
, que eliminax
elementos dexs
. Esta función se itera y los elementos resultantes se recopilan en una lista.fuente
Python 2 ,
5955 bytesPruébalo en línea!
fuente
l[i:i+l[i-1]]=[]
lugar,del l[i:i+l[i-1]]
para guardar un bytePyth, 22 bytes
Se eliminó un byte inútil.
fuente
Python 2 ,
604241 bytes-18 bytes gracias a Luis Mendo
-1 byte gracias a Jonathan Frech
Pruébalo en línea!
fuente
i-=~x[i]
es un byte más corto quei+=1+x[i]
.Retina , 36 bytes
El recuento de bytes asume la codificación ISO 8859-1.
La entrada y la salida están separadas por salto de línea con un salto de línea final.
Pruébalo en línea! (Utiliza comas en lugar de avances de línea para permitir convenientes conjuntos de pruebas).
fuente
Brain-Flak , 64 bytes
Pruébalo en línea!
fuente
({}[()]<{}>)
vs({}<{}>[()])
eran iguales! ¡Qué casualidad!Mathematica,
6450 bytesfuente
C # (.NET Core) , 68 bytes
Pruébalo en línea!
Toma la entrada como una matriz de enteros, devuelve una cadena que contiene los valores no omitidos.
fuente
using System.Linq;
y un bucle normal.R, 58 bytes
Función recursiva. Toma un vector
x
como argumento e inicia un punterop
. Esto imprime la entrada correspondiente dex
, comprueba sip+x[p]
saldría de los límites y, si no, llama a la función para el nuevo puntero.Esta es una solución comparable que devuelve un vector adecuado en lugar de imprimir los dígitos.
fuente
numeric(0)
? también conocido como matriz vacía.Java (OpenJDK 8) , 53 bytes
Gracias a @ PunPun1000 y @TheLethalCoder
Pruébalo en línea!
fuente
n
al bucle?(a[n+=1+a[n]]
. La función también arroja un error después de generar el valor correcto, no conozco el consenso sobre si esto está permitido o no (la pregunta dice que algo al error estándar es ignorar). Si esa era la intención, puede eliminar eln<a.length
bucle for. Finalmente, el código TIO no se ejecuta como está, incluso con el par. La función debe serConsumer<int[]>
func.accept(test)
Alice , 15 bytes
Pruébalo en línea!
Entrada y salida de una lista de enteros decimales separados por salto de línea.
Explicación
El almacenamiento de un número entero n en la cola del iterador hace que el siguiente comando se ejecute n veces. Los espejos como
/
no son comandos, por lo que el siguiente comando sí lo seráI
. Por lo tanto, si solo leemos e imprimimos un valor x , leeremos los valores x + 1 en la próxima iteración, y el último de ellos terminará en la parte superior de la pila. Esto omite los elementos necesarios de la lista de números.fuente
Mathematica , 37 (30?)
Más golfing del método fino de user202729.
Las reglas no parecen especificar explícitamente el formato de salida, así que tal vez:
La salida para la segunda función se ve así:
0.2.4.{}
- notablemente{}
aún se devuelve para un conjunto vacío, conforme a la regla final.fuente
±Drop[{x},a]
puede ser±{x}~Drop~a
porque±
tiene una precedencia menor queInfix
.Lisp común, 51 bytes
Pruébalo en línea!
fuente
Brain-Flak ,
6460 bytesAhorro de 4 bytes basado en una idea de 0 '
Pruébalo en línea!
Anotado
fuente
Rubí,
36 3331Pruébalo en línea.
fuente
f=
como un elemento de encabezado.Python 2.4, 85 bytes
No hay posibilidad de ganar en Python con él, pero me encantan los oneliners y este podría ser interesante para los demás.
Resulta que hay un truco mágico elegante para acceder a la lista de construcción dentro de la comprensión, pero funciona solo en 2.4 y con algunas ediciones en <= 2.3
locals()['_[1]']
lo es. Python crea un nombre secreto_[1]
para la lista, mientras se crea y lo almacenalocals
. También los nombres_[2]
,_[3]
... se usan para listas anidadas.Por lo tanto, cuenta el número de elementos ya agregados más su suma. El resultado es el índice del siguiente elemento deseado.
Creo que debería haber una manera de evitar la enumeración. Al igual que el acceso a la matriz de entrada directamente por índice:
[ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ]
. Pero no puedo encontrar una forma compacta de protegerlo del índice fuera de rango (mientras lo mantengo en línea)fuente
Swift, 63 bytes
Esta es mi primera entrada, así que no estoy 100% seguro de las reglas, pero espero que esta respuesta sea suficiente. No estoy seguro de las reglas sobre cómo obtener la entrada en un sistema. Tengo una respuesta más corta si se me permitió asumir una función en algún lugar que pueda devolver la entrada.
fuente
Perl 6 , 31 bytes
Pruébalo
Expandido:
Para ayudar a comprender cómo funciona el código, sin
[*;0]
esto se generaría una secuencia como la siguiente:fuente
Jalea , 8 bytes
Un programa completo que imprime los resultados, seguido de una nueva línea (la lista vacía no produce resultados).
Pruébalo en línea!
¿Cómo?
fuente
Python 3 , 35 bytes
Pruébalo en línea!
Ejecútelo con
f(*l)
dóndel
está su entrada. Podría decirse que estira las reglas de entrada, pero me encanta el desempaque avanzado.fuente
APL (Dyalog Unicode) , SBCS de 20 bytes
Pruébalo en línea!
fuente
Perl 5 ,
3630 + 1 (-a) = 31 bytesPruébalo en línea!
Toma su entrada como una lista de números separados por espacios.
fuente
PowerShell , 25 bytes
Pruébalo en línea!
fuente