Desafío
Dadas dos cadenas en cualquier formato de E / S predeterminado, haga lo siguiente:
NOTA: El desafío se referirá a la primera cadena como "datos" y a la segunda como "programa".
- Cambie el programa a una cadena infinita que es solo el programa repetido infinitamente (por ejemplo,
10
->1010101010...
). El desafío se referirá a esto como el "programa infinito" Mientras los datos no estén vacíos, haga lo siguiente mientras recorre el programa infinito:
a. Si el comando actual es "0", elimine el bit más a la izquierda en los datos. Si los datos están vacíos, "0" no hace nada.
si. Si el comando actual es "1", agregue el siguiente carácter en el programa a los datos si el bit más a la izquierda en los datos es uno.
C. Si los datos no están vacíos ahora, envíe los datos.
Casos de prueba
Los datos son el lado izquierdo de la entrada y el programa es el lado derecho.
100, 0 --> 00, 0
1111, 1 --> 11111, 111111, 1111111, ...
10, 011 --> 0, 0, 0
1110, 011 --> 110, 1101, 11010, 1010...
Notas
- Los datos y el programa constarán de solo 0s y 1s.
- Para los datos / programas que no se detienen, su programa no necesita detenerse.
- Los datos y el programa no estarán vacíos en la entrada.
- Puede tener múltiples líneas nuevas y finales
- Las lagunas estándar están prohibidas
- Puede usar cualquier formato conveniente de E / S
Como siempre con code-golf , ¡el código más corto gana !
code-golf
interpreter
MilkyWay90
fuente
fuente
100
va a10
cmd0
, cuya definición es "eliminar el bit más a la izquierda en los datos". no sería el más a la izquierda de100
ser1
?Respuestas:
Haskell,
777162 bytesPruébalo en línea!
Editar: -9 bytes gracias a @xnor.
fuente
f:[e,f++take d q]!!p#q
.C # (compilador interactivo de Visual C #) , 82 bytes
Pruébalo en línea!
fuente
0
, y 49 es el valor ASCII de1
List
ySkip
, o algo asíJ , 65 bytes
Pruébalo en línea!
Puedo jugar golf más adelante. Tenga
5
en cuenta que al final sería infinito_
en el programa real, pero lo dejé allí para facilitar la ejecución de los ejemplos que no se detienen.fuente
Python 3 , 74 bytes
Pruébalo en línea!
Argumentos::
d
datosp
,: programa.fuente
05AB1E ,
2421 bytesToma el programa como primera entrada y los datos como segunda entrada.
Pruébalo en línea.
Explicación:
fuente
Ruby ,
6259 bytesPruébalo en línea!
Cómo
c
y los datosd
, llámelosa
yb
. Poner dea
nuevo al final dec
.b
al comienzo ded
ifa==1
. Esto se puede acortar a[b]*a
c
al final ded
ifa==1 and b==1
. Esto se puede acortar ac[0,a*b]
.fuente
Python 2 ,
9682 bytesPruébalo en línea!
Robando un poco la respuesta de Emodiment of Ignorance ...
Un generador que utiliza listas de 1 y 0 para entrada / salida.
fuente
Jalea , 40 bytes
Pruébalo en línea!
Supuse que las nuevas líneas finales están bien. También he ido con una lista de dos listas de ceros y unos como entrada y salida a stdout.
fuente
Python 1 , 75 bytes
Pruébalo en línea!
fuente
[]
lugar de una nueva línea en, por ejemplo, datos[1,0,0]
, programa[0]
.C ++ (gcc) , 178 bytes
Pruébalo en línea!
fuente
C ++ (gcc) ,
294289272 bytes-22 bytes gracias a @ceilingcat
Pruébalo en línea!
Algoritmo bastante sencillo. Copia los datos en una cola y recorre repetidamente el programa. En un "0", elimina el primer elemento de la cola (el primer "bit"). En un 1, agrega el siguiente "bit" del programa a los datos si el primer "bit" de los datos es 1. Luego recorre los datos, imprimiéndolos "bit" por "bit", y finalmente imprime un espacio para separar entradas de datos sucesivas.
fuente
c[1]
! Actualizado.