Tomado de esta pregunta en Stack Overflow. Gracias también a @miles y @Dada por sugerir entradas de prueba que abordan algunos casos de esquina.
El reto
Dada una matriz de valores enteros, elimine todos los ceros que no estén flanqueados por algún valor distinto de cero.
De manera equivalente, una entrada debe mantenerse si es un valor distinto de cero o si es un cero que está inmediatamente cerca de un valor distinto de cero.
Las entradas que se mantienen deben mantener en la salida el orden que tenían en la entrada.
Ejemplo
Dado
[2 0 4 -3 0 0 0 3 0 0 2 0 0]
Los valores que deben eliminarse están marcados con x:
[2 0 4 -3 0 x 0 3 0 0 2 0 x]
y entonces la salida debería ser
[2 0 4 -3 0 0 3 0 0 2 0]
Reglas
La matriz de entrada puede estar vacía (y luego la salida también debería estar vacía).
Los formatos de entrada y salida son flexibles como de costumbre: matriz, lista, cadena o cualquier cosa que sea razonable.
Código de golf, el menos mejor.
Casos de prueba
[2 0 4 -3 0 0 0 3 0 0 2 0 0] -> [2 0 4 -3 0 0 3 0 0 2 0]
[] -> []
[1] -> [1]
[4 3 8 5 -6] -> [4 3 8 5 -6]
[4 3 8 0 5 -6] -> [4 3 8 0 5 -6]
[0] -> []
[0 0] -> []
[0 0 0 0] -> []
[0 0 0 8 0 1 0 0] -> [0 8 0 1 0]
[-5 0 5] -> [-5 0 5]
[50 0] -> [50 0]
-0?
[010 0 0 01 1]?
_2lugar de-2? Muchos idiomas usan ese formato.