Dado un número binario A como entrada con d> 1 dígitos, genera un número binario B con d dígitos de acuerdo con las siguientes reglas para encontrar el enésimo dígito de B:
El primer dígito de B es cero si el primer y el segundo dígitos de A son iguales; de lo contrario, es uno.
Si 1 <n <d, entonces si los dígitos (n-1) th, nth y (n + 1) th de A son iguales, entonces el enésimo dígito de B es cero; de lo contrario, es uno.
El dth dígito de B es cero si los dígitos (d-1) th y dth de A son iguales; de lo contrario, es uno.
Reglas
El formato de entrada / salida de cadena / lista está bien. Otra forma permitida de entrada / salida es un número entero seguido por el número de ceros anteriores (o después del número de ceros anteriores).
Haz tu código lo más corto posible.
Casos de prueba
00 -> 00
01 -> 11
11 -> 00
010111100111 -> 111100111100
1000 -> 1100
11111111 -> 00000000
01010101 -> 11111111
1100 -> 0110
1100 -> 0110
(los primeros 2 dígitos de la salida son siempre idénticos en todos los demás casos de prueba; lo mismo para los últimos 2 dígitos)Respuestas:
Haskell,
595854 bytesPruébalo en línea!
Editar: @ Ørjan Johansen guardó 4 bytes. ¡Gracias!
fuente
"0110"!!(a+b+c)
guarda un byte.[last s]
se puede mover alscanr
valor inicial.Jalea , 9 bytes
Pruébalo en línea!
E / S como lista de dígitos.
Explicación:
fuente
.ị
- Obtiene el elemento en el índice 0.5 . Como floor (0.5) ≠ ceil (0.5) ,ị
devuelve los elementos en los índices 0 y 1 . Jelly es uno indexado, por lo tanto 0 realmente toma el último elemento.Ṛ
invierte el par (porque se devuelven comolast, first
). Luegoj
une el par en la entrada y loṡ3
divide en segmentos superpuestos de longitud 3.E€
comprueba (para cada lista) si todos los elementos son iguales y¬
lógicamente niega cada uno.05AB1E , 6 bytes
La E / S está en forma de matrices de bits.
Pruébalo en línea!
Cómo funciona
fuente
05AB1E , 11 bytes
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
Haskell ,
666159 bytesPruébalo en línea! La entrada es una lista de ceros y unos, la salida es una cadena. Ejemplo de uso:
g [0,1,0,1,1,1,1,0,0,1,1,1]
rendimientos"111100111100"
.Solución anterior de 61 bytes:
Pruébalo en línea!
fuente
J ,
2614 bytesCrédito a la solución 05AB1E de Emigna
Pruébalo en línea!
Intento original
Pruébalo en línea!
fuente
Python 3 , 58 bytes
Pruébalo en línea!
fuente
Casco ,
1511 bytesToma datos como una lista, ¡ pruébelo en línea! O prueba este que usa cadenas para E / S.
Explicación
fuente
Jalea , 8 bytes
La E / S está en forma de matrices de bits.
Pruébalo en línea!
Cómo funciona
fuente
I0,0jI¬¬
JavaScript (ES6), 45 bytes
Toma la entrada como una matriz de caracteres. Devuelve una matriz de enteros.
Casos de prueba
Mostrar fragmento de código
Comentado
fuente
Mathematica, 56 bytes
Pruébalo en línea!
fuente
Jalea , 16 bytes
Pruébalo en línea!
Iba a jugar al golf, pero Erik ya tiene una solución más corta y jugar al golf me acercaría más a la suya. Todavía estoy jugando al golf, pero no actualizaré a menos que pueda vencerlo o encontrar una idea única.
Explicación
fuente
Perl 5 , 62 + 1 (
-n
) = 63 bytesPruébalo en línea!
fuente
s;..$;
construcción al final es ingeniosa. Tendré que recordar eso.Casco , 10 bytes
Pruébalo en línea!
Gracias a Zgarb por -1 byte.
fuente
Ẋo±≠
Guarda un byte.Japt ,
141312 bytesEn parte portado de la solución Dennis 'Jelly. Entrada y salida son matrices de dígitos.
Guardado un byte gracias a ETHproductions.
Intentalo
Explicación
Entrada implícita de la matriz
U
.ä-
obtiene los deltas de la matriz.pT
empuja 0 al final de la matriz.äaT
primero agrega otro 0 al inicio de la matriz antes de obtener los deltas absolutos.mg
asigna sobre los elementos de la matriz que devuelve el signo de cada elemento como -1 para números negativos, 0 para 0 o 1 para números positivos.fuente
.ø
en la respuesta 05AB1E. Creo que eso loA.ä()
que prefieren su segundo argumento, puede agregar un tercer argumento que se agrega. Entonces, en este caso,pT äaT
podría convertirseäaTT
en un ahorro de 2 bytes.Python 3 , 54 bytes
La E / S está en forma de matrices booleanas.
Pruébalo en línea!
fuente
J, 32 bytes
Cómo funciona:
Dejé algunos @s y paréntesis, que solo se aseguran de que combinen bien.
Un ejemplo paso a paso:
fuente
Retina , 35 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación: La expresión regular comienza haciendo coincidir cada dígito de entrada por turno. Un grupo de captura intenta hacer coincidir un dígito diferente antes o después del dígito en consideración. El
?
sufijo permite que la captura coincida 0 o 1 veces;$#2
convierte esto en el dígito de salida.fuente
Pyth , 15 bytes
Pruébalo aquí!
Alternativamente:
mtl{d.:s+hQeBQ3
..aM._M.+++Z.+QZ
.Esto antepone el primer elemento y agrega el último elemento, luego obtiene todas las subcadenas superpuestas de longitud 3, y finalmente toma el número de elementos distintos en cada sublista y lo disminuye. Este desastre se ha hecho en dispositivos móviles a medianoche, por lo que no me sorprendería si hay algunos campos de golf fáciles.
fuente
Gaia , 9 bytes
Pruébalo en línea!
Explicación
Gaia , 9 bytes
Pruébalo en línea!
fuente
C , 309 bytes
No es exactamente un idioma apropiado para el golf, pero vale la pena una respuesta. Pruébalo aquí !
Explicación
fuente
APL + WIN, 29 bytes
Solicita la entrada de pantalla como un vector de dígitos y genera un vector de dígitos.
Explicación
fuente
SNOBOL4 (CSNOBOL4) , 273 bytes
Pruébalo en línea!
fuente
C (tcc) ,
646256 bytesI / O está en forma de cadenas. La función f modifica su argumento s en su lugar.
Pruébalo en línea!
fuente
Lisp común, 134 bytes
Pruébalo en línea!
fuente