Desafio
Dadas duas seqüências de caracteres em qualquer formato de E / S padrão, faça o seguinte:
NOTA: O desafio se referirá à primeira cadeia como "dados" e à segunda como "programa".
- Mude o programa para uma sequência infinita, que é apenas o programa repetido infinitamente (por exemplo
10
- ->1010101010...
). O desafio se referirá a isso como o "programa infinito" Enquanto os dados não estiverem vazios, faça o seguinte enquanto faz um loop no programa infinito:
uma. Se o comando atual for "0", exclua o bit mais à esquerda nos dados. Se os dados estiverem vazios, "0" não fará nada.
b. Se o comando atual for "1", acrescente o próximo caractere no programa aos dados se o bit mais à esquerda nos dados for um.
c. Se os dados não estiverem vazios agora, produza os dados.
Casos de teste
Os dados são o lado esquerdo da entrada e o programa é o lado direito.
100, 0 --> 00, 0
1111, 1 --> 11111, 111111, 1111111, ...
10, 011 --> 0, 0, 0
1110, 011 --> 110, 1101, 11010, 1010...
Notas
- Os dados e o programa consistirão em apenas 0s e 1s
- Para dados / programas que não param, seu programa não precisa parar.
- Os dados e o programa não estarão vazios na entrada.
- Você pode ter várias linhas novas à direita e à frente
- As brechas padrão são proibidas
- Você pode usar qualquer formato de E / S conveniente
Como sempre com o code-golf , o código mais curto vence !
code-golf
interpreter
MilkyWay90
fonte
fonte
100
prossegue10
no cmd0
, cuja definição é "excluir o bit mais à esquerda dos dados". o bit mais à esquerda não iria100
ser1
?Respostas:
Haskell,
777162 bytesExperimente online!
Editar: -9 bytes graças a @xnor.
fonte
f:[e,f++take d q]!!p#q
.C # (compilador interativo do Visual C #) , 82 bytes
Experimente online!
fonte
0
, e 49 é o valor ASCII1
List
eSkip
, ou algo parecidoJ , 65 bytes
Experimente online!
Eu posso jogar isso ainda mais tarde. Observe que
5
no final haveria infinito_
no programa real, mas eu o deixei lá para facilitar a execução de exemplos sem interrupções.fonte
Python 3 , 74 bytes
Experimente online!
Argumentos::
d
datap
,: program.fonte
05AB1E ,
2421 bytesLeva o programa como primeira entrada e dados como segunda entrada.input.
Experimente online.
Explicação:
fonte
Ruby ,
6259 bytesExperimente online!
Quão
c
e dadosd
, chame-osa
eb
. Coloque dea
volta no final dec
.b
no início ded
sea==1
. Isso pode ser reduzido para[b]*a
c
no final ded
ifa==1 and b==1
. Isso pode ser reduzido parac[0,a*b]
.fonte
Python 2 ,
9682 bytesExperimente online!
Roubando um pouco da resposta de Emodiment of Ignorance ...
Um gerador que usa listas de 1 e 0 para entrada / saída.
fonte
Geléia , 40 bytes
Experimente online!
Eu assumi que as novas linhas finais estão ok. Eu também fui com uma lista de duas listas de zeros e uns como entrada e saída para stdout.
fonte
Python 1 , 75 bytes
Experimente online!
fonte
[]
vez de uma nova linha, por exemplo, dados[1,0,0]
, programa[0]
.C ++ (gcc) , 178 bytes
Experimente online!
fonte
C ++ (GCC) ,
294289272 bytes-22 bytes graças a @ceilingcat
Experimente online!
Algoritmo bastante simples. Copia os dados em uma fila e circula repetidamente pelo programa. Em um "0", ele remove o primeiro elemento da fila (o primeiro "bit"). Em um 1, ele adiciona o próximo "bit" do programa aos dados se o primeiro "bit" dos dados for 1. Em seguida, ele percorre os dados, imprimindo "bit" por "bit" e, finalmente, imprime um espaço para separar entradas de dados sucessivas.
fonte
c[1]
! Atualizada.