Convertisseur de TinyBF en Brainf ***

9

Nous avons un convertisseur Brainf *** en TinyBF, mais pas l'inverse, alors en voici un.

Règles:

  • Votre interprète doit prendre un programme TinyBF valide, sur une seule ligne, et il doit sortir le programme BrainF *** correspondant, sur une seule ligne, avec un espace de fin facultatif / nouvelle ligne. Aucun espace de tête n'est autorisé
  • L'entrée peut contenir ou non des caractères qui ne sont pas l'un des quatre caractères TinyBF. Si c'est le cas, vous devez imprimer tous ces caractères aux mêmes endroits.
  • Une réponse sera acceptée le 1er avril (sans plaisanter), basée sur des critères obscurs que j'utiliserai (jk;) j'accepterai le programme le plus court qui ne triche pas selon les règles suivantes)
  • Pas de solution à 0 octet ou à 1 octet, car cela gâche le plaisir si vous créez (ou il existe) un langage de programmation juste à cette fin)

Cas de test


Entrée 1: +++++>+++++=>=|>>+=>>+|=>|>+=>+|(calcule 5 (octet 1) + 5 (octet 2) = 10 (octet 3))
Sortie 1:+++++>+++++<[>>+<<-]>[>+<-]

Entrée 2: +++>++++Hi+++:P+=>=|>|>+>+=>>&&+|=>>|=>>=+!!>>=+|>>>+|(Calcule 3 (octet 1) * 8 (octet 2) = 24 (octet 3)) Sortie 2:+++>++++Hi+++:P+<[>[>+>+<<&&-]>>[<<+!!>>-]<<<-]

HyperNeutrino
la source
Y aura-t-il jamais des commandes d'E / S?
lirtosiast
Non, car TinyBF n'a pas de commandes IO.
HyperNeutrino
C'est incorrect; ==est du cerveau ..
Dennis

Réponses:

1

Python 2, 106 octets

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

Implémente la spécification TinyBF telle que trouvée ici . Essayez-le en ligne . Des améliorations ont été apportées en utilisant les techniques de la réponse de @ Dica . Nécessite une entrée de chaîne entre guillemets.

Mego
la source
Cela fonctionne pour tous mes cas de test! Bon travail.
HyperNeutrino
Vous pouvez enregistrer 5 octets avec r+=b.get(c,c+c)[a]*(c!='='). Vous pouvez également créer une boucle pour une ligne pour économiser 3 autres. Vous pouvez aligner le dict pour enregistrer 4 autres. Inlining input()est un autre 4.
Morgan Thrapp
En outre, vous devez utiliser raw_inputou basculer vers Python 3 et prendre la pénalité d'octet pour print. En ce moment je comprends SyntaxError: invalid syntax.
Morgan Thrapp
@Mergo J'ai basé ma réponse sur la vôtre mais je suppose que ça va parce que les modifications sont lourdes, faites-moi savoir si vous voulez que je la supprime
Dica
@MorganThrapp L'entrée est entre guillemets, donc ça marche pour 2. La prise de chaîne entre guillemets est autorisée par une méta publication que je ne trouve pas pour le moment car je suis sur mobile.
Mego
2

Python 3, 97 octets

Ce script est basé sur la réponse de @ Mego

a=0
for c in input():a-=c=='=';print({'+':'+-','>':'><','|':'[]'}.get(c,c)[a%-2]*(c!='='),end='')
Dica
la source
3
Je pense que cela est trop similaire à la réponse de Mego et aurait dû être suggéré comme une optimisation dans un commentaire.
mbomb007
Bien que ce soit plus court, j'ai accepté la réponse de Mego parce que votre réponse est trop similaire à celle de Mego et semble être une optimisation plutôt qu'une réponse distincte.
HyperNeutrino