Chuyển đổi Fractran thành Brainfuck


18

Lý lịch

Fractran là một ngôn ngữ lập trình hoàn chỉnh bí mật Turing được phát minh bởi John Conway. Một chương trình Fractran bao gồm một danh sách các phân số được sắp xếp. Chương trình bắt đầu bằng cách lấy một số nguyên duy nhất làm đầu vào. Mỗi lần lặp của chương trình, nó tìm kiếm danh sách cho phân số đầu tiên sao cho nhân số đó với phân số đó tạo ra một số nguyên khác. Sau đó, nó lặp lại quá trình này với số mới, bắt đầu trở lại ở đầu danh sách. Khi không có phân số nào trong danh sách có thể nhân với số, chương trình sẽ chấm dứt và đưa ra số làm đầu ra.

Lý do Fractran hoàn thành Turing là vì nó mô phỏng một máy đăng ký. Hệ số nguyên tố của số lưu trữ nội dung của các thanh ghi, trong khi phép chia và phép nhân là một cách để thêm và trừ một cách có điều kiện từ các thanh ghi. Tôi khuyên bạn nên đọc bài viết Wikipedia (liên kết đến ở trên).

Các thách thức

Nhiệm vụ của bạn là viết chương trình ngắn nhất có thể có thể lấy chương trình Fractran hợp lệ từ STDIN làm đầu vào duy nhất của nó và tạo chương trình BF hợp lệ thành STDOUT mô phỏng chương trình Fractran. Có hai cách bạn có thể mô phỏng chương trình Fractran với BF.

LƯU Ý: Câu trả lời của bạn không phải là chương trình BF. Câu trả lời của bạn là mã tạo ra chương trình BF từ bất kỳ chương trình Fractran nào. Mục tiêu là để chương trình BF tương đương với chương trình Fractran. (về mặt kỹ thuật bạn có thể thực hiện cuộc thi trong BF, nhưng sẽ rất khó)

lựa chọn 1

Chương trình của bạn sẽ xuất ra một chương trình BF thực hiện như sau:

  • Lấy chính xác 1 số từ STDIN dưới dạng ký tự ASCII tương ứng (do cách thức hoạt động của đầu vào BF), là đầu vào cho chương trình Fractran.
  • In chính xác 1 số thành STDOUT dưới dạng ký tự ASCII tương ứng, là đầu ra từ chương trình Fractran.

Tùy chọn này có nghĩa là đại diện cho đầu vào và đầu ra chính xác từ máy ảo Fractran.

Lựa chọn 2

Mã BF mà chương trình của bạn tạo ra phải làm như sau:

  • Lấy đầu vào bằng cách lấy thừa số nguyên tố của số đã được mã hóa trong bộ nhớ (trước khi chạy chương trình). Nếu đầu vào là 28 (2 * 2 * 7), thì sẽ có giá trị 2 trong ô thứ hai và giá trị 1 trong ô thứ bảy (con trỏ bắt đầu trên ô 0). Tất cả các ô khác sẽ bằng không.
  • Đưa ra đầu ra bằng cách nhân tố chính của đầu ra được mã hóa trong bộ nhớ khi chương trình kết thúc. Nếu đầu ra là 10, thì phải có giá trị 1 trong mỗi ô 2 và 5. Tất cả các ô có số nguyên tố khác phải có giá trị bằng 0. Nội dung của các tế bào khác không quan trọng.

Tùy chọn này đại diện cho mô hình điện toán đằng sau ngôn ngữ Fractran.

Quy tắc và yêu cầu

  1. Đầu vào (đầu chương trình của bạn) sẽ là danh sách các phân số trên STDIN. Sẽ có một phân số trên mỗi dòng có dấu phẩy giữa tử số và mẫu số. Một dòng trống đại diện cho sự kết thúc của đầu vào. Các phân số sẽ luôn luôn được giảm đến các điều khoản thấp nhất.
  2. Đầu ra của chương trình của bạn phải là một chương trình BF hợp lệ, một dòng thành STDOUT. Chương trình này sẽ có thể mô phỏng chương trình Fractran cụ thể đó theo một trong hai tùy chọn. Đối với bất kỳ đầu vào nào, chương trình BF được tạo sẽ có thể tạo ra cùng một đầu ra như chương trình Fractran.
  3. Bạn phải nói rõ tùy chọn bạn đã chọn.
  4. Bạn có thể chọn giới hạn trên bộ nhớ BF và băng, và liệu chúng có bao bọc không
  5. MÃ GOLF. Ngoài ra, kích thước của các chương trình BF xuất ra không quan trọng, chỉ có kích thước của chương trình đang thực hiện chuyển đổi.
  6. Các chương trình chỉ nên bao gồm ASCII có thể in được

Nếu tôi mơ hồ ở bất cứ đâu, đừng ngần ngại hỏi. Đây là một thách thức rất phức tạp để mô tả.

Ngoài ra, vui lòng gửi mã BF được tạo cho chương trình của bạn cho đầu vào sau, để cung cấp một cách dễ dàng để kiểm tra xem chương trình của bạn có hoạt động không:

33,20
5,11
13,10
1,5
2,3
10,7
7,2

Chương trình này tính toán số 1 trong phần mở rộng nhị phân của một số. Tuy nhiên, đầu vào và đầu ra được định dạng kỳ lạ (như với tất cả các chương trình Fractran). Đầu vào có dạng 2 ^ A, trong khi đầu ra có dạng 13 ^ B.


Vì vậy, về cơ bản, bạn muốn có một trình thông dịch fractran trong brainfuck. Mọi thứ khác đều khá tầm thường.
captncraig

@CMP Tôi muốn một chương trình xuất ra phiên bản BF của chương trình Fractran. Mã thực hiện chuyển đổi này không phải ở BF. Chương trình BF là một mục đích duy nhất.
PhiNotPi

1
Có giới hạn nào về trình thông dịch brainfuck mà chúng ta sử dụng không? Chúng ta phải sử dụng các ô có kích thước byte, hay chúng ta có thể sử dụng các ô int? Ký ức bị ràng buộc? Ký ức bao bọc? Bao bọc tế bào? Bất cứ điều gì chúng tôi muốn làm cho nó hoạt động?
captncraig

Bất cứ điều gì bạn muốn làm cho nó hoạt động, nhưng xin vui lòng xác định trong câu trả lời của bạn.
PhiNotPi

1
Có lẽ có thể giải quyết vấn đề này với BF ...
mbomb007

Câu trả lời:


7

Python, 182 ký tự

Tùy chọn 1, các ô byte tiêu chuẩn. Chỉ có 255 đầu vào khả dĩ (0 là đầu vào không thực sự có ý nghĩa), vì vậy tôi chỉ chạy trình thông dịch Fractran 255 lần trong Python và tạo chương trình tra cứu bảng đơn giản Brainfuck mã hóa kết quả.

import sys
I=map(eval,sys.stdin)
P='+>,'
Q=''
for i in range(1,256):
 while i:j=i;i=([i*x/y for x,y in I if i%y==0]+[0])[0]
 r=j&255;P+='-[';Q=']<[-'+'+'*r+'.'+'-'*r+']>'+Q
print P+Q

Đầu ra cho đầu vào ví dụ ( ___= 246 điều kiện lồng nhau hơn, tôi không thể dán toàn bộ kết quả vì nó quá lớn):

+>,-[-[-[-[-[-[-[-[___]<[-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.-------------------------------------------------------------------------------------------------------------------------------------------------------------------------]>]<[-+++++++++++++.-------------]>]<[-+++++++++++++.-------------]>]<[-+.-]>]<[-+++++++++++++.-------------]>]<[-+++++++++++++.-------------]>]<[-+++++++++++++.-------------]>]<[-+.-]>

1
@PhiNotPi: đúng, tôi có thể cần phát hiện vòng lặp và trường hợp đặc biệt mà ...
Keith Randall

7
Trên thực tế, tôi nghĩ rằng việc xác định xem một chương trình Fractran nhất định có phải là một vòng lặp vô tận hay không tương đương với vấn đề tạm dừng. Chúc may mắn với điều đó. :)
PhiNotPi

1
Một cách tiếp cận thú vị. Chỉ thiếu sót có thể là nếu thông số kỹ thuật fractran nói rằng nó cần xử lý các đầu ra lớn hơn 255, mà tôi biết nhiều chương trình dựa vào, vì vậy có vẻ hơi lạ khi chỉ lấy kết quả LSB.
captncraig

1
@CMP, câu hỏi nêu cụ thể rằng đầu vào cho tùy chọn 1 được lấy từ ascii.
gian hàng

1
@PhiNotPi xác định xem chương trình có tạm dừng hay không, nó hơi khác so với việc có thể tạo một chương trình khác bằng ngôn ngữ khác để nó tạm dừng khi và chỉ khi bản gốc tạm dừng. Cái trước là không thể, trong khi cái sau được thực hiện mỗi ngày bởi trình biên dịch.
Cruncher

3

Python, 420 ký tự

Điều này sử dụng một loại pha trộn của các tùy chọn 1 và 2: Nó giả định rằng brainfuck được triển khai với các số nguyên lớn (tôi sử dụng triển khai Sage). Nhập một chương trình fractran, ví dụ , 33/20,5/11,13/10,1/5,2/3,10/7,7/2. Sau đó, tải trước một số, ví dụ 2^5, tại con trỏ. Sau đó, chạy đầu ra của kịch bản python này. Đợi 44 giây. Kết quả, 13^2nằm ở nơi con trỏ bắt đầu. Tôi không chờ đợi câu trả lời 2^7.

s="[->>>+<<<]+["
for l in raw_input().split(','):
 a,b=map(int,l.split('/'))
 s+="[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>["+"[->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]<"*(b-1)+"[->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]<"+"[->+>+<<]>[-<+>]<"*a+"[-]>>[-<<+>>]<<<<<->>>>]<<]<<"
print s+">+<[->-<]>[-<+>]<]>>>[-<<<+>>>]"

Đây là kịch bản brainfuck đầu tiên của tôi. Nó chắc chắn có thể được chơi gôn hơn nữa, nhưng tôi đã có những thứ khác để làm cho đến tối nay.

chỉnh sửa: thay vì chơi golf thêm nữa, tôi đang nghiên cứu giải pháp cho tùy chọn 2. đồng thời, đây là đầu ra cho chương trình được yêu cầu:

[->>>+<<<]+[[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<[->+>+<<]>[-<+>]>[->[->+>>+<<<]>[-<+>]>>[ [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<->>]<<+[<[-]>-]>>]< [->+>+<<]>>[-<<+>>]<[[-]<-[->+>+<<]>>[-<<+>>]<<>[[-]<<<->>>]<<<++>>>]<]<<[->+>+<<]>>[-<<+>>]<[[-]<->]<[<[-]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]< [->+>+<<]>[-<+>]<[-]>>[-<<+>>]<<<<<->>>>]<<]<<>+<[->-<]>[-<+>]<]>>>[-<<<+>>>]

Đó là một kịch bản Brainfuck đầu tiên hay, +1. Bạn có thể tính toán 2^7với trình thông dịch Brainfuck của tôi trong vòng chưa đầy 5 giây. Ngoài ra, không nên raw_input()thay thế raw_input(hoặc đó là một số điều tôi không biết)?
sao chép

@copy, cảm ơn! bạn nói đúng, raw_input()là cần thiết Tôi không ngạc nhiên khi các phiên dịch viên Brainfuck có năng lực làm tốt hơn việc thực hiện Sage ngây thơ khủng khiếp của tôi.
gian hàng

2

Perl, 326 ký tự

Tôi sẽ trả lời câu hỏi của riêng tôi hy vọng sẽ kích thích nhiều câu trả lời hơn. Tôi tất nhiên không đủ điều kiện để giành chiến thắng. Đây là tùy chọn 2 với bộ nhớ và ô không giới hạn, mặc dù nó hoạt động trên các ô. Mỗi phần được chuyển đổi thành một khối mã duy nhất. Các dòng mới là dễ đọc.

L:{$A=<>;
if($/eq$A){last L}
($B,$C)=eval$A;
$D=$E=$F=$G=$H=2;
while($C>1){
if($C%$H==0){
$C/=$H;
$R=">"x$H;
$L="<"x$H;
$D.=$R.'[-'.$L;
$E.=$R.'-'.$L;
if($H>2){$R.="+[->+<]]>[-<+>]<"}
else{$R.="+[-<+>]]<[->+<]>"}
$G=$R.$L.$G;
$H--}$H++}
$H=2;while($B>1){
if($B%$H==0){
$B/=$H;
$F.=">"x$H.'+'.'<'x$H;
$H--}$H++}
$I="+[-$I$D$E+$F$G]";
redo L}print$I

Đây là ví dụ đầu ra. Điều này lợi dụng thực tế là các nhân vật khác bị bỏ qua như bình luận. Đây cũng có vẻ là một đầu ra rất ngắn so với các mục khác, mặc dù kích thước đầu ra không quan trọng về mặt kỹ thuật.

+[-+[-+[-+[-+[-+[-+[-2>>[-<<>>[-<<>>>>>[-<<<<<2>>-<<>>-<<>>>>>-<<<<<+2>>>+<<<>>>>>>>>>>>+<<<<<<<<<<<>>>>>+[->+<]]>[-<+>]<<<<<<>>+[-<+>]]<[->+<]><<>>+[-<+>]]<[->+<]><<2]2>>>>>>>>>>>[-<<<<<<<<<<<2>>>>>>>>>>>-<<<<<<<<<<<+2>>>>>+<<<<<>>>>>>>>>>>+[->+<]]>[-<+>]<<<<<<<<<<<<2]2>>[-<<>>>>>[-<<<<<2>>-<<>>>>>-<<<<<+2>>>>>>>>>>>>>+<<<<<<<<<<<<<>>>>>+[->+<]]>[-<+>]<<<<<<>>+[-<+>]]<[->+<]><<2]2>>>>>[-<<<<<2>>>>>-<<<<<+2>>>>>+[->+<]]>[-<+>]<<<<<<2]2>>>[-<<<2>>>-<<<+2>>+<<>>>+[->+<]]>[-<+>]<<<<2]2>>>>>>>[-<<<<<<<2>>>>>>>-<<<<<<<+2>>+<<>>>>>+<<<<<>>>>>>>+[->+<]]>[-<+>]<<<<<<<<2]2>>[-<<2>>-<<+2>>>>>>>+<<<<<<<>>+[-<+>]]<[->+<]><<2]

1

Sage, 431 ký tự

Đây là một giải pháp hoàn toàn mới. Tôi đã tìm ra một số cách tốt hơn để làm mọi thứ trong brainfuck, và điều này thực hiện đúng Tùy chọn 2. Các dòng mới được thêm vào cho rõ ràng. Điều này có thể có thể được đánh gôn hơn nữa, nhưng nó liên quan đến việc viết lại BF để có độ sâu vòng lặp thấp hơn.

exec"f=factor;
J=''.join;
Q=L(a,b):Lz:a*z+b*-z;M=Q('<>');
C=Lj,k:(Ll:'[-%s+%s+%s]%s[-%s+%s]%s'%tuple(map(M,[-j,-k,l,-l,l,-l,k])))(j+k);
print '>+[>>>+'+J(map(L(n,m):reduce(Lr,(p,e):'[-%s%s%s[[-]<<+>>]%s<<%s]'%(M(4-p),C(6-p,2),'[-'*(e-1),']'*(e-1),r),f(m),'[-<<<->>>%s]'%J(map(L(p,e):M(4-p)+Q('+-')(e)+M(p-4),f(n/m))))+'<<<'+C(3,2),[map(QQ,x.split('/'))for x in raw_input().split(',')]))+'<<<<+>[-<->]<[->+<]>]'".replace('L','lambda ')

Đầu ra mẫu:

Đưa ra đầu vào 33/20,5/11,13/10,1/5,2/3,10/7,7/2

>+[>>>+[->[->+>>+<<<]>>>[-<<<+>>>]<<[[-]<<+>>]<<[-<<[->>>>+>>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<<[-[[-]<<+>>]]<<[-<<<->>><<-->><+>>-<>>>>>>>+<<<<<<<]]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->>>>>>>[-<<<<<+>>+>>>]<<<[->>>+<<<]<<[[-]<<+>>]<<[-<<<->>>>+<>>>>>>>-<<<<<<<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->[->+>>+<<<]>>>[-<<<+>>>]<<[[-]<<+>>]<<[-<<[->>>>+>>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<<[[-]<<+>>]<<[-<<<->>><<->>>-<>>>>>>>>>+<<<<<<<<<]]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->[->+>>+<<<]>>>[-<<<+>>>]<<[[-]<<+>>]<<[-<<<->>>>-<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[-<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[[-]<<+>>]<<[-<<<->>><<+>><->]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[->>>[-<+>>+<]>[-<+>]<<[[-]<<+>>]<<[-<<<->>><<+>>>+<>>>-<<<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<[-<<[->>>>+>>+<<<<<<]>>>>>>[-<<<<<<+>>>>>>]<<[[-]<<+>>]<<[-<<<->>><<->>>>>+<<<]]<<<[->>>+>>+<<<<<]>>>>>[-<<<<<+>>>>>]<<<<<<+>[-<->]<[->+<]>]
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.