>>>>,[[<]<<+>>>[>],]<[<]<+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>[<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Hãy thử trực tuyến!
An toàn trong các hương vị của BF không che dấu các ô 256
, không hỗ trợ byte rỗng.
Xóa các mũi tên phải ban đầu nếu hương vị hỗ trợ bộ nhớ âm cho 4 byte được lưu.
Giải trình
Chương trình được chia thành 3 giai đoạn:
Stage 1: >>>>,[[<]<<+>>>[>],]<[<]
Stage 2: <+<[>>+<[-<-<+>>]<<++[->>+<<]>]>[-]>>
Stage 3: [<[->.[-]<[->+<]<+[->+<]>>]++++++++++.[-]<[->+<]>>]
Giai đoạn 1
Trong giai đoạn này, chúng tôi đặt tất cả các ký tự lên băng, trong khi vẫn đếm số lượng ký tự.
Đây là băng cho đầu vào abcdefghi
sau băng này:
000 009 000 000 095 096 097 098 099 100 101 102 103
^
Là 009
số đếm.
Đối với mỗi ký tự, chúng ta di chuyển số 0 đầu tiên bên trái [<]
và sau đó thêm một số vào số đếm <<+>>>
, sau đó di chuyển sang số 0 ngoài cùng bên phải [>]
để sẵn sàng cho ký tự tiếp theo.
Giai đoạn 2
Giai đoạn này thực hiện căn bậc hai của chiều dài được lưu trữ trong ô thứ hai.
Nó tiếp tục trừ đi 1, 3, 5, 7, ...
cho đến khi số đạt đến 0, trong khi vẫn kiểm tra số lần lặp.
Nó hoạt động vì số vuông có thể được thể hiện là 1 + 3 + 5 + ...
.
Giai đoạn 3
Suy ra căn bậc hai của độ dài tìm thấy ở trên như n
.
Giai đoạn này xuất các n
ký tự tại một thời điểm, và sau đó xuất một dòng mới, cho đến khi băng được xóa.