Xoắn ốc , điểm: 61921 5127 4715 4655 4191
4.X~>v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X * X X X X X X X X X X X X X X X X X X X X X X X X X
! > h y t f V b n j u [ ( 1 3 2 ) ] U J N B F T Y H G
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*vvv****v+^v+^v+^v+^*v++4
X X X X X X X X X X X X X X X X X X X X X X X X X X
v v v v v v v v v v v v v v v v v v v v v v v v v v
Y y J F V u t U [ G H B n 3 N 2 j ) h g f ] ( 1 b T
Một thông dịch viên có thể được tìm thấy ở đây .
Giải trình:
P.X~ZZ*v+^#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X X X X X X X X X X X X X X X X X X X X X X X X X X
! h y t f V b n j u r d c m k i e s x l o w a z p q
0;vgv*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*v*****************************************************************vP
X X X X X X X X X X X X X X X X X X X X X X X X X X
v v v v v v v v v v v v v v v v v v v v v v v v v v
z y x w V u t s r q p o n m l k j i h g f e d c b a
Chương trình bắt đầu ở 0
nhân vật trên dòng thứ tư. Đoạn mã đầu tiên để chạy là 0;vg
. ;
lấy một số làm đầu vào và đặt nó vào ngăn xếp. v
đặt những gì trong thanh ghi (một số không) vào ngăn xếp. Nó sẽ được sử dụng như là quầy. g
là một nhãn, khi nó đạt được, điều khiển nhảy sang sự xuất hiện khác của chữ cái g
trong mã.
Vì vậy, đây là nơi kiểm soát bây giờ:
X
v
g
Vì có khoảng trắng ở tất cả các hướng khác, con trỏ lệnh bắt đầu di chuyển lên trên.
v
đặt số 0 vào ngăn xếp và X
bật nó ra khỏi ngăn xếp ngay lập tức. Bởi vì giá trị popped bằng 0, con trỏ lệnh di chuyển đến X
(nếu không nó sẽ coi nó là khoảng trắng).
Theo mặc định, luồng điều khiển ở chế độ rẽ phải, vì vậy bây giờ khi đến ngã ba, con trỏ lệnh sẽ quay sang phải. v
một lần nữa đẩy số 0 vào ngăn xếp, *
tăng thanh ghi lên một.
v*v*v
X
v
g
Tiếp theo v
đặt những gì trong thanh ghi (số 1) vào ngăn xếp, con trỏ lệnh cố gắng rẽ sang phải, nhấn tiếp theo X
. Giá trị vừa được thêm vào ngăn xếp được bật lên và được đặt trong thanh ghi. Bởi vì nó khác không, X
không được nhập và *
thay vào đó, IP sẽ chuyển sang bên phải ở bên phải, một lần nữa tăng giá trị trong thanh ghi.
v*v*v*v*v
X X X X X
v v v v v
i h g f e
Điều này xảy ra lặp đi lặp lại cho đến khi chúng ta kết thúc phần này và dòng *
s bắt đầu. Đến bây giờ giá trị trong thanh ghi là 6, đó là chữ g
ASCII trừ chữ ASCII a
. Do đó, với một dòng 97 *
giây, chúng tôi tăng giá trị trong thanh ghi lên 103, khớp với chữ cái g
chúng tôi muốn in. v
đẩy nó vào ngăn xếp và P
là một nhãn khác khi nhấn mà chúng ta nhảy sang cái khác P
trên dòng đầu tiên của mã.
Ở đây .
bật giá trị từ ngăn xếp và in nó dưới dạng ký tự. Sau đó X
bật số 0 không liên tục từ ngăn xếp, sau đó ~
so sánh hai giá trị còn lại trong ngăn xếp (các giá trị là bộ đếm và giá trị đầu vào). Nếu các giá trị là như nhau, toán tử đặt số 0 trong ngăn xếp (nếu không -1 hoặc 1). Một lần nữa, kiểm soát cố gắng rẽ phải. X
bật giá trị so sánh từ ngăn xếp, nếu nó bằng 0 X
và sau khi !
được nhập, kết thúc chương trình.
P.X~ZZ*v+^
X
!
Mặt khác, IP tiếp tục Z
là nhãn mà trong trường hợp này chỉ nhảy một bước sang phải. Lý do để làm điều này là việc nhảy đặt giá trị trong thanh ghi trở về không. *
tăng thanh ghi và v
đặt kết quả 1 vào ngăn xếp. +
bật hai phần tử trên cùng của ngăn xếp (1 và bộ đếm), thêm chúng và đặt kết quả vào ngăn xếp (thực tế, điều này làm tăng bộ đếm lên một). ^
sao chép kết quả từ ngăn xếp vào thanh ghi mà không xóa nó khỏi ngăn xếp.
#
giảm giá trị trong thanh ghi theo một, v
đẩy giá trị giảm xuống ngăn xếp, IP cố gắng quay sang phải và X
bật giá trị từ ngăn xếp. Nếu giá trị khác không, IP sẽ tiếp tục di chuyển về phía đông, giảm giá trị trong thanh ghi, cho đến khi nó về 0 và IP đi vào một X
nhánh.
#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v#v
X X X X X X X X X X X X X X X X X X X X X X X X X
h y t f V b n j u r d c m k i e s x l o w a z p q
Nhánh dẫn đến một nhãn tương ứng với giá trị của bộ đếm. Khi nhấn nhãn, điều khiển nhảy sang sự xuất hiện khác của nhãn trong phần chúng tôi bắt đầu với nhãn g
, bắt đầu một lần lặp khác. Cũng như g
, giá trị trong thanh ghi được tăng lên đến giá trị ASCII của chữ cái chúng ta cần in. Sau đó, ký tự được in và bộ đếm tăng lên, nhãn khác được chọn. Điều này xảy ra cho đến sau lần lặp cuối cùng, bộ đếm bằng đầu vào và chương trình kết thúc.
Chỉnh sửa:
P.X~Zv+^
X *
! Z
Đạt được điều tương tự như
P.X~ZZ*v+^
X
!
nhưng với ít khoảng trắng hơn.
Chỉnh sửa 2:
vv****v+^v+^v+^v+^*v++P
Có thể được sử dụng thay vì:
*****************************************************************vP