Conversor TinyBF para Brainf ***

9

Temos um conversor Brainf *** para TinyBF, mas não o contrário, então aqui está um.

Regras:

  • Seu intérprete deve usar um programa TinyBF válido, em uma linha, e deve emitir o programa BrainF *** correspondente, em uma linha, com espaço em branco / nova linha à direita opcional. Nenhum espaço em branco à esquerda é permitido
  • A entrada pode ou não conter caracteres que não são nenhum dos quatro caracteres do TinyBF. Nesse caso, você deve imprimir todos esses caracteres nos mesmos pontos.
  • Uma resposta será aceita em 1º de abril (sem brincadeiras), com base em alguns critérios obscuros que usarei (jk;) Aceitarei o programa mais curto que não trapaceie pelas seguintes regras)
  • Não há soluções de 0 ou 1 byte, porque isso estraga a diversão se você criar (ou houver) uma linguagem de programação apenas para essa finalidade)

Casos de teste


Entrada 1: +++++>+++++=>=|>>+=>>+|=>|>+=>+|(Calcula 5 (byte 1) + 5 (byte 2) = 10 (byte 3))
Saída 1:+++++>+++++<[>>+<<-]>[>+<-]

Entrada 2: +++>++++Hi+++:P+=>=|>|>+>+=>>&&+|=>>|=>>=+!!>>=+|>>>+|(Calcula 3 (byte 1) * 8 (byte 2) = 24 (byte 3)) Saída 2:+++>++++Hi+++:P+<[>[>+>+<<&&-]>>[<<+!!>>-]<<<-]

HyperNeutrino
fonte
Alguma vez haverá comandos de E / S?
lirtosiast
Não, porque o TinyBF não possui comandos de E / S.
HyperNeutrino 16/02
Isso está incorreto; ==é do cérebro ..
Dennis

Respostas:

1

Python 2, 106 bytes

a=0
r=''
for c in input():a=[a,~a][c=='='];r+={'+':'+-','>':'><','|':'[]'}.get(c,c)[a%-2]*(c!='=')
print r

Implementa a especificação TinyBF como encontrada aqui . Experimente online . As melhorias foram feitas usando técnicas da resposta de @ Dica . Requer entrada de string entre aspas.

Mego
fonte
Isso funciona para todos os meus casos de teste! Bom trabalho.
21416 HyperNeutrino
Você pode salvar 5 bytes com r+=b.get(c,c+c)[a]*(c!='='). Você também pode fazer o loop for uma linha para economizar mais 3. Você pode alinhar o ditado para economizar mais 4. Inlining input()é outro 4.
Morgan Thrapp
Além disso, você precisa usar raw_inputou alternar para o Python 3 e aplicar a penalidade de bytes print. Agora eu entendo SyntaxError: invalid syntax.
Morgan Thrapp
@Mergo Baseei minha resposta na sua, mas eu acho que está tudo bem porque as modificações são pesados, deixe-me saber se você quer me para removê-lo
Dica
@MorganThrapp A entrada é citada, portanto funciona para 2. A entrada de string entre aspas é permitida por uma meta post que não consigo encontrar agora porque estou no celular.
Mego 16/02
2

Python 3, 97 bytes

Este script é baseado na resposta de @ Mego

a=0
for c in input():a-=c=='=';print({'+':'+-','>':'><','|':'[]'}.get(c,c)[a%-2]*(c!='='),end='')
Dica
fonte
3
Eu acho que isso é muito semelhante à resposta do Mego e deveria ter sido sugerido como uma otimização em um comentário.
mbomb007
Embora seja mais curto, aceitei a resposta do Mego porque sua resposta é muito semelhante à do Mego e parece mais uma otimização do que uma resposta distinta.
HyperNeutrino