เกลียว , คะแนน: 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
ล่ามสามารถพบได้ที่นี่
คำอธิบาย:
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
โปรแกรมเริ่มต้นที่0
ตัวละครในบรรทัดที่สี่ 0;vg
ชิ้นแรกของรหัสที่จะวิ่งเป็น ;
ใช้ตัวเลขเป็นอินพุตและวางลงในสแต็ก v
วางสิ่งที่อยู่ในรีจิสเตอร์ (ศูนย์) ลงในสแต็ก มันจะถูกใช้เป็นตัวนับ g
เป็นฉลากเมื่อถึงตัวควบคุมจะข้ามไปที่การเกิดขึ้นของตัวอักษรอื่น ๆg
ในรหัส
ดังนั้นนี่คือที่ซึ่งการควบคุมอยู่ในขณะนี้:
X
v
g
เนื่องจากมีช่องว่างในทิศทางอื่นทั้งหมดตัวชี้คำสั่งจะเริ่มเลื่อนขึ้น
v
วางศูนย์ลงในสแต็กและX
ดึงจากสแต็กทันที เนื่องจากค่าที่ผุดเป็นศูนย์ตัวชี้คำสั่งจะย้ายไปที่X
(มิฉะนั้นจะถือว่าเป็นช่องว่าง)
ตามค่าเริ่มต้นโฟลว์ควบคุมอยู่ในโหมดเลี้ยวขวาดังนั้นตอนนี้เมื่อถึงทางแยกตัวชี้คำสั่งจะเปลี่ยนไปทางขวา v
ยังผลักศูนย์อีกครั้งในกองซ้อน*
เพิ่มการลงทะเบียนหนึ่งรายการ
v*v*v
X
v
g
ถัดไปv
สถานที่สิ่งที่อยู่ในการลงทะเบียน (หมายเลข 1) X
เป็นกลุ่มที่มีความพยายามในการเรียนการสอนชี้ไปเลี้ยวขวาตีต่อไป ค่าที่เพิ่งเพิ่มไปยังสแต็กจะถูกตอกและวางไว้ในการลงทะเบียน เพราะมันไม่ได้เป็นศูนย์X
ไม่ได้ป้อนและ IP ดำเนินการต่อไป*
ทางด้านขวาแทนเพิ่มค่าในการลงทะเบียนอีกครั้ง
v*v*v*v*v
X X X X X
v v v v v
i h g f e
สิ่งนี้จะเกิดขึ้นซ้ำแล้วซ้ำอีกจนกว่าเราจะไปถึงจุดสิ้นสุดของส่วนนี้และจุด*
เริ่มต้นของ โดยตอนนี้คุ้มค่าในการลงทะเบียนคือ 6 ซึ่งเป็นตัวอักษร ASCII ตัวอักษรg
ASCII ลบ a
ดังนั้นด้วยบรรทัด 97 *
s เราจึงเพิ่มค่าใน register เป็น 103 ซึ่งตรงกับตัวอักษรที่g
เราต้องการพิมพ์ v
ผลักมันลงในสแต็กและP
เป็นอีกเลเบลเมื่อกดปุ่มซึ่งเราจะข้ามไปที่อีกP
บรรทัดหนึ่งของรหัส
ที่นี่.
จะปรากฏค่าจากสแต็กและพิมพ์เป็นอักขระ หลังจากนั้นX
จะปรากฏศูนย์ภายนอกจากสแต็กจากนั้น~
เปรียบเทียบค่าที่เหลือสองค่าในสแต็ก หากค่าเหมือนกันตัวดำเนินการจะวางศูนย์ในสแต็ก (มิฉะนั้น -1 หรือ 1) อีกครั้งการควบคุมพยายามที่จะเลี้ยวขวา X
ดึงค่าของการเปรียบเทียบจากสแต็กถ้าเป็นศูนย์X
และหลังจาก!
ป้อนแล้วการยกเลิกโปรแกรม
P.X~ZZ*v+^
X
!
มิฉะนั้น IP จะยังคงอยู่Z
ซึ่งเป็นป้ายกำกับซึ่งในกรณีนี้จะข้ามไปทางขวาหนึ่งขั้นเท่านั้น เหตุผลในการทำเช่นนี้คือการกระโดดกำหนดค่าในรีจิสเตอร์กลับเป็นศูนย์ *
เพิ่มการลงทะเบียนและv
วาง 1 ผลลัพธ์ลงในสแต็ก +
ดึงองค์ประกอบสองอันดับแรกของสแต็ก (1 และตัวนับ) เพิ่มพวกมันและวางผลลัพธ์ลงในสแต็ก (ซึ่งจะเพิ่มตัวนับทีละหนึ่ง) ^
คัดลอกผลลัพธ์จากสแต็กไปยังรีจิสเตอร์โดยไม่ลบออกจากสแต็ก
#
ลดค่าในการลงทะเบียนทีละหนึ่งv
ผลักดันค่าที่ลดลงไปยังสแต็ค IP พยายามที่จะเลี้ยวไปทางขวาและX
ดึงค่าจากสแต็ก หากค่าไม่เป็นศูนย์ IP จะย้ายไปทางทิศตะวันออกลดค่าในการลงทะเบียนจนกว่าจะถึงศูนย์และ IP จะเข้าสู่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
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
สาขานำไปสู่ฉลากที่สอดคล้องกับค่าของตัวนับ เมื่อกดปุ่มฉลากการควบคุมจะข้ามไปที่การเกิดขึ้นของป้ายกำกับในส่วนที่เราเริ่มต้นด้วยป้ายกำกับg
เริ่มต้นซ้ำอีกครั้ง เช่นเดียวกับg
ค่าในรีจิสเตอร์จะเพิ่มขึ้นเป็นค่า ASCII ของตัวอักษรที่เราต้องการพิมพ์ จากนั้นตัวละครจะถูกพิมพ์และตัวนับที่เพิ่มขึ้นจะมีการเลือกป้ายกำกับอื่น สิ่งนี้จะเกิดขึ้นจนกระทั่งหลังจากการทำซ้ำครั้งล่าสุดตัวนับจะเท่ากับอินพุตและโปรแกรมจะสิ้นสุดลง
แก้ไข:
P.X~Zv+^
X *
! Z
บรรลุสิ่งเดียวกัน
P.X~ZZ*v+^
X
!
แต่มีช่องว่างน้อยกว่า
แก้ไข 2:
vv****v+^v+^v+^v+^*v++P
สามารถใช้แทน:
*****************************************************************vP