Bộ chuyển đổi TinyBF sang Brainf ***


9

Chúng tôi có một trình chuyển đổi Brainf *** sang TinyBF, nhưng không phải là cách khác, vì vậy đây là một.

Quy tắc:

  • Trình thông dịch của bạn phải có một chương trình TinyBF hợp lệ, trên một dòng và nó phải xuất chương trình BrainF *** tương ứng, trên một dòng, với khoảng trắng / dòng mới theo dõi tùy chọn. Không có khoảng trắng hàng đầu được cho phép
  • Đầu vào có thể có hoặc không chứa các ký tự không phải là một trong bốn ký tự TinyBF. Nếu vậy, bạn phải in tất cả các ký tự này trong cùng một điểm.
  • Một câu trả lời sẽ được chấp nhận vào ngày 1 tháng 4 (không nói đùa), dựa trên một số tiêu chí tối nghĩa tôi sẽ sử dụng (jk;) Tôi sẽ chấp nhận chương trình ngắn nhất không gian lận theo các quy tắc sau)
  • Không có giải pháp 0 byte hoặc 1 byte, vì nó phá hỏng niềm vui nếu bạn tạo (hoặc có) ngôn ngữ lập trình chỉ cho mục đích này)

Các trường hợp thử nghiệm


Đầu vào 1: +++++>+++++=>=|>>+=>>+|=>|>+=>+|(Tính 5 (byte 1) + 5 (byte 2) = 10 (byte 3))
Đầu ra 1:+++++>+++++<[>>+<<-]>[>+<-]

Đầu vào 2: +++>++++Hi+++:P+=>=|>|>+>+=>>&&+|=>>|=>>=+!!>>=+|>>>+|(Tính 3 (byte 1) * 8 (byte 2) = 24 (byte 3)) Đầu ra 2:+++>++++Hi+++:P+<[>[>+>+<<&&-]>>[<<+!!>>-]<<<-]


Sẽ có bao giờ các lệnh I / O?
lirtosiast

Không, vì TinyBF không có lệnh IO.
HyperNeutrino

Điều đó không chính xác; ==là của Brainfuck ..
Dennis

Câu trả lời:


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

Triển khai đặc tả TinyBF như được tìm thấy ở đây . Hãy thử trực tuyến . Những cải tiến đã được thực hiện bằng cách sử dụng các kỹ thuật từ câu trả lời của @ Dica . Yêu cầu đầu vào chuỗi trích dẫn.


Điều này làm việc cho tất cả các trường hợp thử nghiệm của tôi! Làm tốt lắm.
HyperNeutrino

Bạn có thể lưu 5 byte với r+=b.get(c,c+c)[a]*(c!='='). Bạn cũng có thể tạo một vòng lặp for để tiết kiệm thêm 3 dòng. Bạn có thể nội tuyến dict để tiết kiệm thêm 4. Nội tuyến input()là 4. khác
Morgan Thrapp 16/2/2016

Ngoài ra, bạn cần sử dụng raw_inputhoặc chuyển sang Python 3 và nhận hình phạt byte cho print. Ngay bây giờ tôi nhận được SyntaxError: invalid syntax.
Morgan Thrapp 16/2/2016

@Mergo Tôi dựa trên câu trả lời của bạn nhưng tôi đoán nó ổn vì các sửa đổi rất nặng nề, hãy cho tôi biết nếu bạn muốn tôi xóa nó
Dica 16/2/2016

@MorganThrapp Đầu vào được trích dẫn, vì vậy nó hoạt động cho 2. Lấy đầu vào chuỗi trích dẫn được cho phép trên một bài đăng meta mà tôi không thể tìm thấy ngay bây giờ vì tôi đang sử dụng điện thoại di động.
Mego

2

Python 3, 97 byte

Kịch bản này dựa trên câu trả lời của @ Mego

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

3
Tôi nghĩ rằng điều này quá giống với câu trả lời của Mego và nên được đề xuất như là một sự tối ưu hóa trong một bình luận.
mbomb007

Mặc dù điều này ngắn hơn, tôi đã chấp nhận câu trả lời của Mego vì câu trả lời của bạn quá giống với câu trả lời của Mego có vẻ giống như một sự tối ưu hóa hơn là một câu trả lời khác biệt.
HyperNeutrino
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.