Dada una lista / matriz no vacía que contiene solo enteros no negativos como este:
[0, 0, 0, 8, 1, 4, 3, 5, 6, 4, 1, 2, 0, 0, 0, 0]
Salida de la lista con ceros a la izquierda y al final eliminados.
El resultado para esto sería:
[8, 1, 4, 3, 5, 6, 4, 1, 2]
Algunos otros casos de prueba:
[0, 4, 1, 2, 0, 1, 2, 4, 0] > [4, 1, 2, 0, 1, 2, 4]
[0, 0, 0, 0, 0, 0] > nothing
[3, 4, 5, 0, 0] > [3, 4, 5]
[6] > [6]
El código más corto gana
code-golf
array-manipulation
Lamaro
fuente
fuente
Nil
()
/[]
slip()
/Empty
Any
{}
algunas de ellas son indefinidas, algunas definidas pero singulares, algunas que se incluyen en otras listas para que no aumenten el número de elementos. (Hay tantas variaciones diferentesAny
como clases / tipos y roles)"0,4,1,2,0,1,2,4,0" => "4,1,2,0,1,2,4"
EDITAR: Acabo de notar que muchos idiomas ya hacen esto.Respuestas:
Jalea , 2 bytes
Código:
Explicación:
Pruébalo en línea!
fuente
JavaScript (ES6) 43
Menos golf
Prueba
fuente
f=(a,r=f(a,a))=>r.reverse().filter(x=>a|=x)
también es de 43 bytes.CJam, 13 bytes
Con la matriz ingresada.
Versión más larga:
fuente
Pyth, 4 bytes
Manifestación:
De Pyth's
rev-doc.txt
:fuente
05AB1E , 4 bytes
Código:
Pruébalo en línea!
Explicación:
Utiliza la codificación CP-1252.
fuente
Retina, 12 bytes
El avance de línea final es significativo.
Gracias a @Martin Büttner y @FryAmTheEggman por guardar algunos bytes.
Pruébalo en línea
fuente
R, 43 bytes
o como lectura / escritura STDIN / STDOUT
Esto encuentra el máximo acumulativo desde el principio y la cadena final (invertida). El
&
operador convierte estos dos vectores en uno lógico del mismo tamaño quex
, (los ceros siempre se convertirán aFALSE
y todo lo demás aTRUE
), de esta manera hace posible el subconjunto dex
acuerdo con las condiciones cumplidas.fuente
Haskell , 29 bytes
fuente
Mathematica
3427 bytesEsto aplica repetidamente reglas de reemplazo hasta que dicha acción no proporcione una nueva salida. 7 bytes guardados gracias a Alephalpha.
La primera regla elimina un cero al principio; la segunda regla elimina un cero al final de la matriz.
fuente
#//.{0,a___}|{a___,0}:>{a}&
05AB1E, 4 bytes
Básicamente, recortar los ceros iniciales y finales de la entrada, dados como una matriz.
Pruébalo en línea!
fuente
Perl, 19 + 1 = 20 bytes
Requiere
-p
bandera:fuente
s/^0 | 0$//&&redo
?
como en el ejemplo - pero eso no va a reducir"0"
..Jalea, 10 bytes
Esto no usa el incorporado.
Probarlo aquí .
fuente
Perl, 38 bytes
Ejecutar con
perl -p
, (3 bytes agregados para-p
).Acepta números en STDIN, uno por línea; emite números en STDOUT, uno por línea, como debería hacerlo una utilidad Unix con buen comportamiento.
Solo trata los números representados exactamente por '0' como ceros; sería posible soportar otras representaciones con unos pocos bytes más en la expresión regular.
Versión más larga, aún por ejecutar con
-p
:Versión ampliada, que muestra interacciones con el indicador -p:
fuente
perl -E
, la-p
bandera generalmente solo se cuenta como un byte, ya que solo hay un byte adicional diferente entre eso yperl -pE
.Elixir, 77 bytes
l es la matriz.
Editar: wah! copia / pasta falla. por supuesto, uno tiene que importar Enum, que aumenta el recuento de bytes en 12 (o usar Enum.function_name, lo que lo hará aún más largo).
fuente
Vitsy, 13 bytes
Vitsy está mejorando lentamente ... (Voy por ti, Jelly. ಠ_ಠ)
Esto sale con la matriz en la pila. Para facilitar la lectura, el TryItOnline! El enlace que he proporcionado debajo de la explicación generará una lista formateada.
Explicación:
Tenga en cuenta que esto generará una StackOverflowException para entradas excesivamente grandes.
TryItOnline!
fuente
R, 39 bytes
Cuatro bytes menos que la respuesta R de David Arenburg . Esta implementación encuentra el primer y el último índice en la matriz que es mayor que cero, y devuelve todo en la matriz entre esos dos índices.
fuente
MATL , 9 bytes
Pruébalo en línea!
Explicación
fuente
Dyalog APL, 15 bytes
Probarlo aquí .
fuente
{⌽⍵/⍨×+\⍵}⍣2
?Rubí,
4944 bytesGracias a manatwork por cortar 5 bytes con un método completamente diferente!
Este
drop
es solo el primer elemento de la matrizwhile
, es 0, invierte la matriz, se repite y finalmente invierte la matriz para devolverla al orden correcto.fuente
.drop_while()
solución basada sería más corta (si usa 2 funciones):f=->a{a.drop_while{|i|i<1}.reverse};->a{f[f[a]]}
eval
fealdad:->a{eval ?a+'.drop_while{|i|i<1}.reverse'*2}
.<1
, de todos modos. ¡Gracias!Vim 16 pulsaciones de teclas
El usuario debe escribir la entrada entre
i
yesc
, y no cuenta como una pulsación de tecla. Esto supone que habrá al menos un cero inicial y uno posterior. Si esa no es una suposición válida, podemos usar esta versión un poco más larga: (18 pulsaciones de teclas)fuente
i
y<esc>
). En vim golf, el golfista comienza con la entrada ya cargada en el archivo del búfer y el cursor en la esquina superior izquierda, pero el usuario también tiene que guardar y salir (ZZ
generalmente es la forma más rápida). Entonces podrías hacer algo comod[1-9]<enter>$NlDZZ
(13 pulsaciones de teclas). NotaN
/ enn
lugar de/<up><enter>
ES6, 51 bytes
t
se establece en el índice después del último valor distinto de cero, mientras quef
se incrementa siempre que solo se hayan visto ceros hasta ahora.fuente
Perl 6 , 23 bytes
Uso:
fuente
Retina, 11 bytes
Bastante sencillo. Reemplaza recursivamente ceros al principio y al final de la línea.
Pruébalo en línea!
fuente
JavaScript (ES6), 47 bytes
¿Dónde
a
está la matriz?fuente
a=>a.join(a="")...
.[14]
devolverá[1, 4]
.Python, 84 caracteres
fuente
for i in-1,0:
JavaScript (ES6), 34 bytes
La entrada y la salida tienen la forma de una lista delimitada por espacios, como
"0 4 1 2 0 1 2 4 0"
.fuente
Javascript (ES6) 40 bytes
fuente
PHP,
565452 bytesUtiliza la codificación de Windows-1252
Solución basada en cadenas
Corre así:
Si su terminal está configurado en UTF-8, esto es lo mismo:
Ajustes
fuente
Python 2,
6967 bytesfuente
for i in-1,0:
[space][space]while
con[tab]while
. Y==0
puede ser<1
. mothereff.in/…PowerShell, 49 bytes
Toma entrada
$args[0]
y-join
los une con comas para formar una cadena. Luego usamos el.Trim()
función llamada dos veces para eliminar primero el final y luego los ceros y las comas iniciales. Luego,-split
la cadena de comas vuelve a una matriz.Versión alternativa, sin usar conversión
PowerShell de , 81 bytes
Como PowerShell no tiene una función para recortar matrices, definimos una nueva función
f
que hará la mitad de esto por nosotros. La función toma$a
como entrada, luego recorre cada elemento con un bucle foreach|%{...}
. Cada iteración, verificamos un condicional para$_ -or $b
. Como los enteros distintos de cero son verdaderos, pero$null
falsey (y$b
, al no estar previamente definidos, comienzan como$null
), esto solo se evaluará$true
una vez que alcancemos nuestro primer elemento no cero en la matriz. Luego establecemos$b=1
y agregamos el valor actual$_
en la tubería. Eso continuará hasta el final de la matriz de entrada, con ceros en el medio y el final se agregará a la salida, ya que hemos establecido la$b
verdad.Encapsulamos y almacenamos los resultados del bucle de nuevo en
$a
. Luego, indexamos$a
en orden inverso (es decir, invirtiendo la matriz), que queda en la tubería y, por lo tanto, es el valor de retorno de la función.Llamamos a la función dos veces en el
$args[0]
entrada del programa para "recortar" desde el frente, luego el frente nuevamente (que es el reverso, ya que invertimos). El orden se conserva porque estamos invirtiendo dos veces.Esta versión juega un poco flojo con las reglas para una matriz de entrada de todos los ceros, pero dado que ignorar STDERR es una práctica aceptada, el programa escupirá dos
Cannot index into a null array
errores (detallados) a STDERR (el equivalente de PowerShell) y luego no emitirá nada.fuente