Konverter TinyBF ke Brainf ***

9

Kami memiliki konverter Brainf *** ke TinyBF, tetapi tidak sebaliknya, jadi inilah salah satunya.

Aturan:

  • Penerjemah Anda harus mengambil program TinyBF yang valid, pada satu baris, dan itu harus menampilkan program BrainF *** yang sesuai, pada satu baris, dengan spasi / baris baru trailing opsional. Tidak ada spasi putih terkemuka dibolehkan
  • Input mungkin atau mungkin tidak mengandung karakter yang bukan salah satu dari empat karakter TinyBF. Jika demikian, Anda harus mencetak semua karakter ini di tempat yang sama.
  • Jawaban akan diterima pada 1 April (tidak bercanda), berdasarkan beberapa kriteria tidak jelas yang akan saya gunakan (jk;) Saya akan menerima program terpendek yang tidak curang oleh aturan berikut ini)
  • Tidak ada solusi 0-byte atau 1-byte, karena itu merusak kesenangan jika Anda membuat (atau ada) bahasa pemrograman hanya untuk tujuan ini)

Uji Kasus


Input 1: +++++>+++++=>=|>>+=>>+|=>|>+=>+|(Menghitung 5 (byte 1) + 5 (byte 2) = 10 (byte 3))
Output 1:+++++>+++++<[>>+<<-]>[>+<-]

Input 2: +++>++++Hi+++:P+=>=|>|>+>+=>>&&+|=>>|=>>=+!!>>=+|>>>+|(Menghitung 3 (byte 1) * 8 (byte 2) = 24 (byte 3)) Output 2:+++>++++Hi+++:P+<[>[>+>+<<&&-]>>[<<+!!>>-]<<<-]

HyperNeutrino
sumber
Apakah akan ada perintah I / O?
lirtosiast
Tidak, karena TinyBF tidak memiliki perintah IO.
HyperNeutrino
Itu tidak benar; ==adalah brainfuck's ..
Dennis

Jawaban:

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

Menerapkan spesifikasi TinyBF seperti yang ditemukan di sini . Cobalah online . Perbaikan dilakukan menggunakan teknik dari jawaban @ Dica . Membutuhkan input string yang dikutip.

Mego
sumber
Ini bekerja untuk semua kasus pengujian saya! Kerja bagus.
HyperNeutrino
Anda dapat menyimpan 5 byte dengan r+=b.get(c,c+c)[a]*(c!='='). Anda juga dapat membuat for loop satu baris untuk menghemat 3 lagi. Anda dapat memasukkan dict untuk menyimpan lebih banyak. Inlining input()adalah 4. lainnya
Morgan Thrapp
Juga, Anda harus menggunakan raw_inputatau beralih ke Python 3 dan mengambil hukuman byte print. Sekarang saya mengerti SyntaxError: invalid syntax.
Morgan Thrapp
@Mergo Saya mendasarkan jawaban saya pada Anda tetapi saya kira tidak apa-apa karena modifikasinya berat, beri tahu saya jika Anda ingin saya menghapusnya
Dica
@MorganThrapp Masukan tersebut dikutip, jadi berfungsi untuk 2. Mengambil input string yang dikutip diperbolehkan per posting meta yang saya tidak dapat menemukan sekarang karena saya sedang di ponsel.
Mego
2

Python 3, 97 byte

Skrip ini didasarkan pada jawaban @ Mego

a=0
for c in input():a-=c=='=';print({'+':'+-','>':'><','|':'[]'}.get(c,c)[a%-2]*(c!='='),end='')
Dica
sumber
3
Saya pikir ini terlalu mirip dengan jawaban Mego dan seharusnya disarankan sebagai pengoptimalan dalam komentar.
mbomb007
Meskipun ini lebih pendek, saya menerima jawaban Mego karena jawaban Anda terlalu mirip dengan Mego dan sepertinya merupakan pengoptimalan daripada jawaban yang berbeda.
HyperNeutrino