TinyBF a Brainf *** convertidor

9

Tenemos un convertidor Brainf *** a TinyBF, pero no al revés, así que aquí hay uno.

Reglas:

  • Su intérprete debe tomar un programa TinyBF válido, en una línea, y debe generar el programa BrainF *** correspondiente, en una línea, con espacios en blanco / nueva línea opcionales. No se permiten espacios en blanco iniciales
  • La entrada puede o no contener caracteres que no sean ninguno de los cuatro caracteres TinyBF. Si es así, debe imprimir todos estos caracteres en los mismos lugares.
  • Se aceptará una respuesta el 1 de abril (no es broma), según algunos criterios oscuros que usaré (jk;) Aceptaré el programa más corto que no haga trampa con las siguientes reglas)
  • No hay soluciones de 0 bytes o 1 byte, porque arruina la diversión si crea (o hay) un lenguaje de programación solo para este propósito)

Casos de prueba


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

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

Hiperneutrino
fuente
¿Habrá alguna vez comandos de E / S?
lirtosiast
No, porque TinyBF no tiene comandos IO.
HyperNeutrino
Eso es incorrecto; ==es una mierda de cerebro ..
Dennis

Respuestas:

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 la especificación TinyBF como se encuentra aquí . Pruébalo en línea . Se realizaron mejoras utilizando técnicas de la respuesta de @ Dica . Requiere entrada de cadena entre comillas.

Mego
fuente
¡Esto funciona para todos mis casos de prueba! Buen trabajo.
HyperNeutrino
Puede guardar 5 bytes con r+=b.get(c,c+c)[a]*(c!='='). También puede hacer que el bucle for una línea para guardar 3 más. Puede insertar el dict para guardar 4 más. La alineación input()es otra 4.
Morgan Thrapp
Además, debe usar raw_inputo cambiar a Python 3 y tomar la penalización de bytes print. En este momento lo entiendo SyntaxError: invalid syntax.
Morgan Thrapp
@ Mergo Basé mi respuesta en la tuya, pero supongo que está bien porque las modificaciones son pesadas, avísame si quieres que la elimine
Dica
@MorganThrapp La entrada se cita, por lo que funciona para 2. Se permite la entrada de cadena citada por metaetiqueta que no puedo encontrar en este momento porque estoy en el móvil.
Mego
2

Python 3, 97 bytes

Este script se basa en la respuesta de @ Mego

a=0
for c in input():a-=c=='=';print({'+':'+-','>':'><','|':'[]'}.get(c,c)[a%-2]*(c!='='),end='')
Dica
fuente
3
Creo que esto es demasiado similar a la respuesta de Mego y debería haber sido sugerido como una optimización en un comentario.
mbomb007
Aunque esto es más corto, acepté la respuesta de Mego porque su respuesta es demasiado similar a la de Mego y parece una optimización en lugar de una respuesta distinta.
HyperNeutrino