ความท้าทายนี้เป็นรางวัลสำหรับais523สำหรับการชนะหมวด " Rookie of the Year " ใน " Best of PPCG 2016 " ขอแสดงความยินดี!
BackFlipเป็นภาษาการเขียนโปรแกรมลึกลับที่ทำโดยผู้ใช้ais523ผู้สร้างได้ดีกว่า 30 esolangs ที่น่าสนใจอื่น ๆรายการ
BackFlip เป็นภาษา 2D เช่นBefungeหรือ> <>ที่ตัวชี้คำแนะนำลัดไปตามตารางข้อความ (โปรแกรม) เลื่อนขึ้นลงซ้ายซ้ายและขวาเปลี่ยนทิศทางขึ้นอยู่กับตัวละครที่ใช้ ในทางกลับกันกริดในโปรแกรม BackFlip จะเปลี่ยนไปในขณะที่มันกำลังเคลื่อนที่อยู่เช่นAnt ของ Langtonแลงตันของมด
สำหรับความท้าทายนี้คุณอาจสมมติว่าโปรแกรม BackFlip เป็นตารางสี่เหลี่ยมของข้อความเสมอ (ทุกบรรทัดมีความยาวเท่ากัน) ขนาด 1 × 1 อย่างน้อยที่สุดมีเพียงอักขระ./\<>^V
เท่านั้น ( .
ใช้สำหรับการมองเห็นมากกว่าที่ว่าง) ความหมาย BackFlip ที่เราจะใช้ที่นี่เหมือนกับสเปคดั้งเดิมสเปคเดิม
ตัวชี้คำสั่ง (IP) ใน BackFlip เริ่มต้นเสมอที่มุมซ้ายบนของโปรแกรมมุ่งหน้าไปทางขวาเสมอ คำสั่งมีสามประเภทที่สามารถพบได้:
.
เป็น no-op IP ยังคงดำเนินต่อไปในทิศทางที่เป็นไป No-op ยังคงไม่มีการใช้งาน/
และ\
กระจก พวกเขาสะท้อนให้เห็นถึงทรัพย์สินทางปัญญาในทิศทางที่ระบุโดยมุมของพวกเขาแล้วพวกเขาเปลี่ยนเป็นชนิดอื่น ๆ ของกระจก- ตัวอย่างเช่นถ้าหัว IP ที่เหลือเป็น
\
ก็จะเริ่มย้ายขึ้นไปแทนซ้ายและกลายเป็น\
/
- ตัวอย่างเช่นถ้าหัว IP ที่เหลือเป็น
<
,>
,^
และV
มีลูกศร พวกเขาเปลี่ยนเส้นทาง IP ไปยังทิศทางที่พวกเขาชี้ไปในแล้วพวกเขาเปลี่ยนเป็นลูกศรที่ชี้ไปในทิศทางที่ IP ที่มาจาก (ตรงข้ามกับทิศทาง IP ถูกย้าย)- ตัวอย่างเช่นถ้า IP หัวลง
>
มันจะเริ่มย้ายขวาแทนที่จะลงและ>
กลายเป็น^
เพราะนั่นคือทิศทางที่ IP มาจาก
- ตัวอย่างเช่นถ้า IP หัวลง
โปรแกรม BackFlip จะหยุดทำงานเมื่อ IP เคลื่อนออกจากขอบเขตนั่นคือดับลงที่กริด ปรากฎว่าโปรแกรม BackFlip ทั้งหมดจบลงในที่สุดเพราะลูปไม่มีที่สิ้นสุดเป็นไปไม่ได้ (คุณอาจถือว่านี่เป็นเรื่องจริง)
เป้าหมายของคุณในการท้าทายนี้คือการเขียนโปรแกรมหรือฟังก์ชั่นที่ใช้ในโปรแกรม BackFlip และส่งออกจำนวนการเคลื่อนไหวที่ตัวชี้คำสั่งใช้ก่อนที่โปรแกรมจะยุติ นั่นคือIP ใช้เวลากี่ขั้นตอนในการเรียกใช้โปรแกรมหรือไม่ ซึ่งรวมถึงขั้นตอนเริ่มต้นสู่กริดและขั้นตอนสุดท้ายของมัน
ตัวอย่างเช่นตัวชี้คำสั่งใช้เวลา 5 ขั้นตอนในตารางเล็ก ๆ น้อย ๆ....
:
.... <- empty 4×1 grid
012345 <- step number of the IP
ดังนั้นการส่งออกจะมี....
5
ในตาราง 4 × 2 ที่ซับซ้อนมากขึ้น
\...
\.><
IP ออกจากกริดในขั้นตอนที่ 9 ดังนั้นเอาต์พุตคือ9
:
step grid IP position (@)
0 \... @....
\.>< ....
1 \... @...
\.>< ....
2 /... ....
\.>< @...
3 /... ....
/.>< .@..
4 /... ....
/.>< ..@.
5 /... ....
/.<< ...@
6 /... ....
/.<< ..@.
7 /... ....
/.>< .@..
8 /... ....
/.>< @...
9 /... ....
\.>< ....
@
รหัสที่สั้นที่สุดในหน่วยไบต์ชนะ
คุณอาจรับอินพุตเป็นอาร์เรย์ของบรรทัดหรือเมทริกซ์ของอักขระแทนสตริงหลายบรรทัดหากต้องการ แต่คุณต้องใช้อักขระ./\<>^V
(ไม่ใช่ opcodes ที่เป็นจำนวนเต็ม) คุณอาจใช้พื้นที่แทน.
ถ้าต้องการ ไม่เป็นไรถ้าตัวละครชอบ\
จำเป็นต้องหลีกเลี่ยงในอินพุต เอาต์พุตจะเป็นจำนวนเต็มมากกว่าหนึ่งเสมอ
กรณีทดสอบ
....
5
\...
\.><
9
.
2
..
3
.
.
2
\
2
^
2
.^.
3
<.
2
\\
\/
7
>V
^<
6
>\
>/
6
\><
2
\><
\><
7
\><
\><
\><
12
\.V.
\.\<
5
\.V.
\./<
9
V./\
V./\
>./<
..\/
14
\V..
.^..
\/><
.V..
.^..
20
\.V.V.
\./.\<
.>\<..
..^.^.
31
\.V.V.V.
\./>/.\<
.>\>\<..
..^.^.^.
69
\.V.V.V.V.
\./>/>/.\<
.>\>\>\<..
..^.^.^.^.
145
\.V.V.V.V.V.V.V.V.V.V.
\./>/>/>/>/>/>/>/>/.\<
.>\>\>\>\>\>\>\>\>\<..
..^.^.^.^.^.^.^.^.^.^.
9721
/
จะทำให้ IP ขึ้นไปและการเข้าสู่ทางด้านบน/
จะทำให้ IP นั้นถูกต้องราวกับว่ามันเป็นลูกบอลที่กระดอนจากกำแพง ( แต่จำได้ว่า/
การเปลี่ยนแปลงทับขวาหลังจากที่ IP สัมผัสมัน.)