Inspirado por esta pregunta SO
Como entrada, se le dará una lista no entera de enteros, donde se garantiza que el primer valor no sea cero. Para construir la salida, camine desde el principio de la lista, generando cada valor distinto de cero en el camino. Cuando encuentre un cero, repita el valor que agregó más recientemente a la salida.
Puede escribir un programa o función, y hacer que la entrada / salida tome cualquier formato conveniente que no codifique información adicional, siempre y cuando siga siendo una secuencia ordenada de enteros. Si sale de un programa, puede imprimir una nueva línea final. Excepto por esta nueva línea final, su salida debe ser una entrada aceptable para su envío.
El código más corto en bytes gana.
Casos de prueba
[1, 0, 2, 0, 7, 7, 7, 0, 5, 0, 0, 0, 9] -> [1, 1, 2, 2, 7, 7, 7, 7, 5, 5, 5, 5, 9]
[1, 0, 0, 0, 0, 0] -> [1, 1, 1, 1, 1, 1]
[-1, 0, 5, 0, 0, -7] -> [-1, -1, 5, 5, 5, -7]
[23, 0, 0, -42, 0, 0, 0] -> [23, 23, 23, -42, -42, -42, -42]
[1, 2, 3, 4] -> [1, 2, 3, 4]
[-1234] -> [-1234]
code-golf
array-manipulation
FryAmTheEggman
fuente
fuente

[0,0]?[1,01]? Usando la respuesta Pyth de issac, compare esto y esto .01no es un número entero válido en la entrada de Pyth, por lo que Isaac no tiene que dar cuenta de eso. Otras respuestas pueden aceptar entradas como esa si lo desean, siempre y cuando sean consistentes (como la respuesta deRespuestas:
Pyth, 6 bytes
Demostración
m ... Qsignifica que esto asigna una función sobre la entrada. La función que se está mapeando esJ|dJ. Eso significaJ = d or Jen Python, ya queJes implícitamente asignado al siguiente valor en el primer uso. A diferencia de Python, las expresiones de asignación devuelven el valor asignado en Pyth, por lo que el mapa devuelve cada valor sucesivo deJ, según se desee.fuente
Gelatina , no competidora
3 bytes Esta respuesta no es competitiva, ya que utiliza características que son posteriores al desafío.
Pruébalo en línea!
Cómo funciona
fuente
Rubí, 25 bytes.
Esto es realmente muy malvado.
Específicamente, el fragmento
x==0 ? a : (a=x).Si hubiera utilizado cualquier otro nombre de variable para
a(el valor anterior distinto de cero), digamos:ytendría que declararlo fuera demap(porquey=xsolo tendría un alcance dentro de esa únicamapiteración). Eso usaría cuatro caracteres más (y=0;).Pero si uso el nombre de la variable
a... sí, lo has adivinado. Realmente estoy reasignando al argumento que obtuvimos como entrada (la matriz original).mapno le importa porque solo le importa el valor original de la cosa a la que se llama, por lo que esto realmente funciona.fuente
Haskell, 21 bytes
La función (anónima) que hacemos está en la última línea. Las dos primeras líneas definen una función auxiliar.
La función binaria
%genera el segundo argumento, a menos que sea0, en cuyo caso genera el primer argumento.scanl1itera esta función sobre la lista de entrada, generando el resultado en cada paso.fuente
J, 8 bytes
Esta es una función unaria, invocada de la siguiente manera.
Explicación
fuente
{:@(#~|)\, así que un byte más.Sed, 8
/^0$/coincide con un cero en una línea; si es así,gcopia el espacio de espera en el espacio del patrónhcopia el espacio del patrón en el espacio de esperaLos enteros están separados por una nueva línea. p.ej:
fuente
Javascript ES6, 19 bytes
Solución directa, bucle a través de la entrada, asignar
pal elemento actualiopsiies0y generarlo.Ejemplo ejecutado (asignando una función anónima a
f):fuente
Retina , 15 bytes
Pruébalo en línea.
Reemplaza repetidamente un número seguido de un cero con el doble de ese número hasta que la cadena deja de cambiar.
fuente
Dyalog APL,
12109 bytesInspirado por la respuesta J de @ Zgarb.
Probarlo aquí .
fuente
Pyth, 8 bytes
Usos
.u(reducción acumulativa) por|(Pythonor), con el caso base 0.fuente
.ues más largo, incluso siJyKestán atados. ¿Alguna vez es óptimo?Python 2, 29 bytes
Toma la entrada como números dados uno por línea, y las salidas en el mismo formato. Termina con error después de terminar.
Usando la naturaleza de cortocircuito de
or, la variablexse actualiza a la entrada, a menos que esa entrada sea 0 (que es Falsey), en cuyo caso permanece su valor actual. Entonces,xse imprime. Tenga en cuenta que, dado que el primer valor de la lista no es cero,xno se evalúa en el lado derecho antes de ser asignado.fuente
#\nJ|EJMathematica 38 bytes
La coincidencia de patrones reemplaza repetidamente
...a,0,...con...a,a...fuente
Matlab, 41
46bytesEsto está inspirado en mi respuesta original , con las siguientes diferencias:
nonzeros.0.Gracias a Tom Carpenter por el ítem 4, y por su sugerencia de usar un programa en lugar de una función; juntos permitieron una reducción de 5 bytes.
Ejemplo:
fuente
x=input('')lugar de la declaración de función y endisp(u(t)lugar dely=bit. Además, puede guardar cuatro bytes más al deshacerse de latvariable, produciendox=input('');u=x(~~x);disp(u(cumsum(~~x)))41.@(x)x(~~x)(cumsum(~~x))funciona en Octave.Gol> <> , 8 bytes
Entrada y salida son números separados por nueva línea.
Explicación:
Pruébelo en línea aquí.
fuente
Japt,
87 bytesBastante simple. Toma entradas separadas por comas. Pruébalo en línea!
Sin golfos y explicación
Versión de 4 bytes no competitiva : (
åcomando y!función automática añadidos después del desafío)Explicación:
Pruébalo en línea!
fuente
ªes OR, en lugar deº? ¿ºY es por casualidad?ºes((. Fueron asignados por valor Unicode ya que encontré la necesidad de ellos: Pªnd andºr es genial, aunque podría usar eso para Japt 2.0 ...Java, 78
Aquí solo hacemos un seguimiento del último valor distinto de cero y lo introducimos donde corresponda. Parece la forma obvia de hacerlo.
fuente
Prólogo (SWI) , 54 bytes
Pruébalo en línea!
Explicación
Estoy realmente feliz con esta respuesta.
Primero decimos que la lista vacía es la solución de la lista vacía:
Luego decimos que esa
[X,X|Y]es la solución[X,0|T], si eliminamos la segunda entrada de cada una de las soluciones restantes.Por último, decimos que cualquier cosa sobrante es válida si comienzan con el mismo valor y el resto de las dos listas coinciden entre sí.
Si esa explicación no funciona para usted, aquí está el código traducido a Haskell:
Pruébalo en línea!
fuente
GolfScript, 10 bytes
Este programa toma la entrada de stdin, en forma de una matriz de GolfScript literal (por ejemplo
[1 0 2 0]), y escribe su salida en stdout en el mismo formato (por ejemplo[1 1 2 2]).Pruébalo en línea.
Una función (tomar y devolver una matriz GolfScript) sería tres bytes más larga, debido a la necesidad de envolverla en un bloque y asignarla a un símbolo:
Por supuesto, si solo se cuenta el cuerpo de la función (es decir,
[{1$or}*]), entonces puedo guardar un byte en comparación con el programa independiente.fuente
Minkolang 0.14 ,
1210 bytesPruébalo aquí La entrada se puede dar como en la pregunta, pero sin corchetes .
Explicación
Minkolang es toroidal, por lo que gira hasta el principio y continúa hasta que golpea
.y se detiene.fuente
𝔼𝕊𝕄𝕚𝕟, 7 caracteres / 12 bytes
Try it here (Firefox only).
Explicación
fuente
O , 31 bytes
Esto toma una entrada separada por
,y genera la misma lista[].Explicación:
[] Poner el resultado en la matriz [I ', T% T /] {n #} d] Formatea la entrada en una matriz de números {n. {: V} {; V}?} d Complete los ceros (vea a continuación cómo funciona esto)17 bytes
Toma datos como una lista de números separados por espacios usando notación postfix y solo puede manejar números hexadecimales de un solo dígito. Los negativos se posponen con
_.Explicación:
I ~] Pone la entrada en una matriz entera {} d Para cada número en la entrada n. {; V} {: V}? Si el número es 0, presione V Si no, establezca V en el númerofuente
I~]{n.{:V}{;V}?}d. Me pregunto siddebería poner el valor en la pila en lugar den...-42, pero agrega corchetes alrededor de la salida.R,
393733 bytesEsta es una función sin nombre que acepta un vector y devuelve un vector. Requiere
zooque se instale el paquete. Tenga en cuenta que no es necesariozooque se adjunte al espacio de nombres ya que lo estamos haciendo referencia directamente.El nombre de esta operación en el mundo de las estadísticas es imputación de LOCF, donde LOCF significa última observación llevada adelante. Para lograr esto en R, podemos usarlo
na.locfdesde elzoopaquete, que reemplaza losNAvalores con el último noNAvalor conocido . Solo tenemos que reemplazar los ceros en la entrada conNAs primero.Para hacer eso, usamos
x|NA, que seráTRUEcuandox != 0y deNAotra manera. Si multiplicamos esto porx, losTRUEelementos se reemplazan por los elementos correspondientes dexy losNAs permanecenNA, reemplazando así todos los ceros. Esto se pasa a lozoo::na.locfque nos da exactamente lo que queremos.¡Guardado 4 bytes gracias a flodel!
fuente
Óxido, 100 bytes
Tropecé con este desafío, pensé en probarlo en mi idioma favorito. Intenté usarlo
[T]::windows_mut()al principio, antes de descubrir que no existe . Y en realidad podría haber sido más largo que esto. De todos modos, resulta que el Rust golfizado es muy feo y no es muy competitivo (¡especialmente con todos esos esotéricos anticuados!) 1La nueva línea no está incluida en el bytecount; solo está ahí para que no tenga que desplazarse hacia los lados. No cambia el significado del código.
Sin golf:
[1] Al menos no es tan malo como Java.
fuente
public static void mainplaca repetitiva ...Vía Láctea 1.2.1 , 33 bytes
Esto supone que la lista de enteros está únicamente en la pila.
Explicación
fuente
Julia, 33 bytes
Esta es una función
gque acepta una matriz y devuelve una matriz. Comenzamos una variable temporalaen 0. Para cada elementoide la entrada, siino es 0, entonces asignamosaai. Siies 0,ano cambia en esa iteración. Usamosacomo el valor en esa posición en la matriz de salida.fuente
Perl 6 , 21 bytes
uso:
fuente
R, 36 bytes
Veamos cómo funciona esto usando
x=como ejemplo. Aquí,
!!xserá el vector lógico (Verdadero / Falso):Además,
seq(a=x)proporciona un vector de índices siempre quex:Multiplicamos ambos, dando:
Tomamos el máximo acumulativo:
Finalmente, usamos ese último vector como los índices para extraer de
x:fuente
CJam, 11 bytes
Pruébalo en línea.
Cómo funciona
fuente
Powershell, 32 bytes
$x|%{...}hace el bloque de script para cada elemento en$x.($_,$t)es una matriz de elementos actuales$ty[!$_]significa que usamos!$_para indexar en la matriz. El índice será0(falso) para elementos distintos de cero y1(verdadero) cuando el elemento actual sea cero, por$tlo que será el elemento actual o$t. Los paréntesis rodean la expresión de asignación para que se emita su valor. Sin paréntesis, sería una tarea "silenciosa"$t.fuente
param($x)que convierte esto en un programa. El resultado es una colección de enteros que puede enviar como parámetro al programa, por ejemplo,$a = .\program.ps1 1,2,3,4,0,0,5y luego.\program.ps1 $afunciona como se espera.$args|%{($p=($_,$p)[!$_])}- 26 bytes usando $ args.Japt , 3 bytes
Intentalo
fuente