Tarea
Dado un conjunto no vacío de 0
y 1
, reducir a la mitad las longitudes de las ejecuciones de 0
.
Entrada
Una serie de 0
y 1
. Formato aceptable:
- Matriz real en tu idioma
- Cadena separada por salto de línea de
0
y1
- Cadena contigua de
0
y1
- Cualquier otro formato razonable
Por ejemplo, las siguientes tres entradas son todas aceptables:
[1, 0, 0, 1]
"1\n0\n0\n1"
(donde\n
hay un salto de línea U + 000A)"1001"
Puede suponer que las carreras de 0
tendrán una longitud uniforme .
Salida
Una serie de 0
y 1
, en los formatos aceptables anteriores.
Casos de prueba
input ↦ output
[1,0,0,1,0,0,1] ↦ [1,0,1,0,1]
[1,1,0,0,1,1,0,0,1] ↦ [1,1,0,1,1,0,1]
[1,1,0,0,1,1,1,0,0,1,1] ↦ [1,1,0,1,1,1,0,1,1]
[1,1,1] ↦ [1,1,1]
[0,0,1] ↦ [0,1]
[0,0] ↦ [0]
[1,1,1,0,0,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,1,1,0,0,1,0,0] ↦ [1,1,1,0,0,1,1,1,1,0,1,0,1,1,0,1,1,1,1,0,1,0]
Puntuación
Este es el código de golf . La respuesta más corta en bytes gana.
Se aplican lagunas estándar .
code-golf
array-manipulation
Monja permeable
fuente
fuente
true
y enfalse
lugar de1
y0
?0
veraz.Respuestas:
Retina , 4 bytes
Pruébalo en línea!
fuente
05AB1E , 5 bytes
Pruébalo en línea!
Explicación
fuente
00
es un comportamiento extraño ...11
son once y no1,1
. Un efecto secundario de eso es que se00
convierte en00
lugar de0,0
:)0
o en su0 0
lugar, pero lo que sea.Haskell , 33 bytes
Pruébalo en línea! Uso:
f[1,1,0,0,1,1,0,0,1]
. Itera sobre la lista y reemplaza dos ceros consecutivos por un cero.fuente
C (gcc) , 35 bytes
48 es el código ascii de '0'
mejor versión 43 bytes como lo sugiere Neil
otro de 40 bytes esta vez (nuevamente como lo sugirieron Neil y VisualMelon) :)
y luego 35 bytes gracias a Khaled.K
Pruébalo en línea!
fuente
s+=2-*s%2
?for(;*s;s+=2-*s%2)putchar(*s);
guarda otro byte.s+=50-*s
? No he hecho C durante años y no quiero avergonzarme invocando un comportamiento indefinido (proveniente de C # donde no hay ninguno)putchar
documentos, ¿puedes hacerf(char*s){for(;*s;s+=50-putchar(*s));}
?f(char*s){*s&&f(s+50-putchar(*s));}
sed , 8 bytes
Pruébalo en línea!
fuente
0
s con0
.Octava, 22 bytes
Verifique todos los casos de prueba aquí.
Esta es una función anónima que toma una cadena en el formato
'1001000011'
como entrada y reemplaza dos ceros consecutivos con un solo cero.fuente
Java, 50 bytes
Probar en línea
fuente
s->s.replaceAll("00","0")
.replace
lugar dereplaceAll
guardar 3 bytesreplace
solo reemplazará la primera apariciónHaskell , 28 bytes
Pruébalo en línea!
Recursivamente toma el primer elemento, dejando caer el segundo si el primero es cero, hasta la lista de vacíos. Si la primera entrada es
h
, entonces las primeras1-h
se eliminan del resto.fuente
Japt ,
7 65 bytesPruébalo en línea!
Simplemente reemplaza cada ejecución de dos ceros en la entrada por un cero. Utiliza la entrada de cadena (es decir
"1001001"
).fuente
'
Creo"00"
con'0²
:-)PHP, 26
simplemente reemplace todo
00
por0
.fuente
Alice , 13 bytes
Pruébalo en línea!
Explicación
Esta es una plantilla simple para programas lineales que operan completamente en modo ordinal. La inicial
/
refleja la IP para moverse hacia el sureste y luego rebota diagonalmente hacia arriba y hacia abajo a través del código hasta los espejos al final. Esos simplemente compensan la posición en uno para que en el camino de regreso la IP atraviese las celdas restantes. Al leer el código de esta manera en zigzag se convierte en:Esta es una simple sustitución de cadena:
Hay algunas otras formas de insertar las dos cadenas, por ejemplo,
'00'0
oe000t
, pero no he encontrado nada que supere los 5 bytes (y tendría que reducir dos bytes para poder acortar el programa).fuente
Prólogo (SWI) , 42 bytes
Pruébalo en línea!
fuente
*
operador.Java ,
131123 bytesPruébalo en línea!
fuente
JavaScript (ES6),
2621 bytesToma la entrada como una cadena y devuelve una cadena.
Intentalo
fuente
Lua, 33 bytes
Toma una cadena a través de la entrada y condensa los ceros dobles. Fácil.
fuente
Jalea , 8 bytes
Pruébalo en línea!
Posiblemente otras respuestas en idiomas sin un
.replace()
o similar podrían usar este truco.Explicación
fuente
Alice ,
1210 bytes2 bytes guardados gracias a Martin Ender
Pruébalo en línea!
Explicación
Este es un código 1-D que funciona en modo cardinal, por lo que es fácil seguir su flujo:
fuente
i.h%...
Python (lista de E / S), 36 bytes
Pruébalo en línea!
Recursivamente toma el primer elemento, luego elimina el restante si el primero era cero.
38 bytes:
Pruébelo en línea Esto toma una lista de Python y genera una lista de Python al reemplazar su representación de cadena. La E / S de cadena permitiría una solución más directa y más corta, como
para el
'1001'
formatofuente
lambda s:s.replace('00','0')
debería estar bien.APL (Dyalog) , 9 bytes
Pruébalo en línea!
fuente
Perl 5, 7 + 1 (bandera -p) = 8 bytes
Toma la entrada como números separados por nueva línea. Omite la siguiente línea si ve un cero.
fuente
V , 4 bytes
Pruébalo en línea!
fuente
MATL , 5 bytes
Pruébalo en línea!
Explicación
Esto es similar a la respuesta Octave de Stewie Griffin :
8 bytes
Esto evita el reemplazo de cadena / matriz incorporado.
Pruébalo en línea!
Explicación
Considere la entrada
[1,0,0,1,0,0,1]
como un ejemplo:fuente
Brachylog , 10 bytes
Pruébalo en línea!
No estoy seguro de que esto sea óptimo todavía ...
Explicación
Esto explota el error que
c
fallará en una lista de enteros que tiene ceros a la izquierda.fuente
[0,0,4,2]
en42
. Los ceros a la izquierda hacen que falle ahora porque está aquí para evitar los ceros a la izquierda infinitos cuando la entrada es una variable, pero aquí la entrada está totalmente conectada a tierra, por lo que no debería existir limitación.C #, 191 bytes
Pruébalo en línea!
No es ni limpio ni corto, pero funciona.
Toma la entrada como una cadena contigua de caracteres, las salidas en el mismo formato
Explicación:
Nota
Sí, soy consciente de que esto podría hacerse simplemente usando
s.Replace("00","0")
, mi objetivo era evitar usar la solución obvia. Después de todo, el objetivo de PPCG es divertirse, ¿verdad? ;)fuente
Replace
. Estoy usando C #, así que no me engaño acerca de obtener el código más corto posible, especialmente con lenguajes como Jelly, por lo que podría divertirme un poco. en el proceso.string a(string s){var r="";for(int i=0;i<s.Length;i+=50-s[i])r+=s[i];return r;}
(Parece que esta es básicamente la respuesta C)Pyth, 8 bytes
Enlace de prueba.
Explicación:
fuente
Awk - 18 bytes
Primero intente hacer algo con Awk para que sea posible jugar más al golf.
Uso:
echo "1001001" | awk '{gsub(00,0);print}'
fuente
Lote, 24 bytes.
Toma entrada en STDIN. Algo competitivo por una vez.
fuente
Common Lisp, SBCL,
4832 bytes-16 bytes gracias a Julian Wolf
entrada:
salida:
Explicación
Leemos la lista de entrada. La lista se usa en la
format
función. Lo recorremos generando1
si el elemento es1
y enviando0
y omitiendo el siguiente elemento de la lista0
.fuente
~[
lugar de~:[
permitirle indexar con 0 y 1 directamente, lo que debería ahorrarle un montón de bytesMathematica, 24 bytes
Una función que espera una cadena de
"0"
s y"1"
s y devuelve una cadena similar. Sintaxis autoexplicativa. Mathematica tiene muchas transformaciones integradas; la clave es usar uno que transforme cada subexpresión relevante (diferente/.
) pero que solo pase por la expresión una vez (diferente//.
).fuente
Jalea , 10 bytes
Pruébalo en línea!
Explicación
fuente