Convertitore TinyBF in Brainf ***


9

Abbiamo un convertitore da Brainf *** a TinyBF, ma non viceversa, quindi eccone uno.

Regole:

  • L'interprete deve prendere un programma TinyBF valido, su una riga, e deve emettere il corrispondente programma BrainF ***, su una riga, con spazi vuoti / newline finali opzionali. Non è consentito alcun spazio bianco iniziale
  • L'input può contenere o meno caratteri che non sono uno dei quattro caratteri TinyBF. In tal caso, è necessario stampare tutti questi personaggi negli stessi punti.
  • Una risposta sarà accettata il 1 ° aprile (non scherzando), sulla base di alcuni criteri oscuri che userò (jk;) Accetterò il programma più breve che non imbroglia in base alle seguenti regole)
  • Nessuna soluzione a 0 byte o 1 byte, perché rovina il divertimento se si crea (o esiste) un linguaggio di programmazione solo per questo scopo)

Casi test


Ingresso 1: +++++>+++++=>=|>>+=>>+|=>|>+=>+|(calcola 5 (byte 1) + 5 (byte 2) = 10 (byte 3))
Uscita 1:+++++>+++++<[>>+<<-]>[>+<-]

Ingresso 2: +++>++++Hi+++:P+=>=|>|>+>+=>>&&+|=>>|=>>=+!!>>=+|>>>+|(calcola 3 (byte 1) * 8 (byte 2) = 24 (byte 3)) Uscita 2:+++>++++Hi+++:P+<[>[>+>+<<&&-]>>[<<+!!>>-]<<<-]


Ci saranno mai comandi I / O?
lirtosiast,

No, perché TinyBF non ha comandi IO.
HyperNeutrino,

Non è corretto; ==è di brainfuck ..
Dennis,

Risposte:


1

Python 2, 106 byte

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

Implementa la specifica TinyBF come trovata qui . Provalo online . Sono stati apportati miglioramenti utilizzando le tecniche della risposta di @Dica . Richiede input di stringa tra virgolette.


Questo funziona per tutti i miei casi di test! Buon lavoro.
HyperNeutrino,

È possibile salvare 5 byte con r+=b.get(c,c+c)[a]*(c!='='). Puoi anche fare il ciclo for una riga per salvarne altre 3. Puoi incorporare il dict per salvarne altri 4. Inlining input()è un altro 4.
Morgan Thrapp,

Inoltre, è necessario utilizzare raw_inputo passare a Python 3 e prendere la penalità di byte per print. Adesso capisco SyntaxError: invalid syntax.
Morgan Thrapp,

@Mergo Ho basato la mia risposta sulla tua, ma immagino che vada bene perché le modifiche sono pesanti, fammi sapere se vuoi che lo rimuova
Dica,

@MorganThrapp L'input è citato, quindi funziona per 2. È consentito prendere input di stringa tra virgolette per un meta post che non riesco a trovare in questo momento perché sono su dispositivo mobile.
Mego,

2

Python 3, 97 byte

Questo script si basa sulla risposta di @ Mego

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

3
Penso che questo sia troppo simile alla risposta di Mego e avrebbe dovuto essere suggerito come ottimizzazione in un commento.
mbomb007,

Sebbene sia più breve, ho accettato la risposta di Mego perché la tua risposta è troppo simile a quella di Mego e sembra un'ottimizzazione piuttosto che una risposta distinta.
HyperNeutrino,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.