ปลาที่รักที่แหวกว่ายในรหัส> <> (ภาษาโปรแกรมลึกลับ)ได้ถูกนำออกมาจากสภาพแวดล้อมตามธรรมชาติ การเปลี่ยนแปลงนี้ทำให้ไม่สามารถเคลื่อนที่ไปมาได้ในแบบที่มันเคยเป็น: สิ่งที่เคยเป็นการเคลื่อนไหวแบบ toroidal นั้นถูก จำกัด การเคลื่อนไหวแบบซ้ายไปขวาอย่างง่าย แต่>> โปรแกรมยังคงเขียนราวกับว่าปลาสามารถเคลื่อนที่ผ่านมันได้ มันเป็นหน้าที่ของคุณโปรแกรมเมอร์ที่รักการเขียนโปรแกรมให้เป็น Linearize โปรแกรม> <> และทำได้เพียงไม่กี่ไบต์เท่าที่จะทำได้ ปลาไม่มีความทรงจำที่ใหญ่มาก
การเคลื่อนไหวใน> <>
ใน> <> การเคลื่อนไหวนั้นจะเป็นวงแหวนและหนึ่งตัวอักษรในแต่ละครั้ง ซึ่งหมายความว่าปลา (ตัวชี้) สามารถ "พันรอบ" จากจุดสิ้นสุดของบรรทัดกลับไปที่จุดเริ่มต้น ใน> <> ปลายังสามารถเคลื่อนที่จากบนลงล่างล่างขึ้นบนและจากขวาไปซ้ายได้ตรงกันข้ามกับวิธีที่พอยน์เตอร์เคลื่อนที่ส่วนใหญ่ ดังนั้นรูปแบบการเคลื่อนไหวนี้จะถูกต้อง:
>>>^ >>>v
>>>^ v
และมันจะสิ้นสุดในลูปที่ไม่มีที่สิ้นสุด
ปลาเคลื่อนไหวในตารางที่มีความยาวเท่ากับสูงสุด (ความยาวแถว) และความสูงเท่ากับจำนวนแถว
คุณจะรู้ได้อย่างไรว่าปลาเคลื่อนไหวอย่างไร คำสั่งเหล่านี้เปลี่ยนเวกเตอร์ทิศทางการเคลื่อนที่ (เช่น(-1,0)
หมายถึงจากขวาไปซ้าย):
Command | Direction Change
---------------------------
> | (1,0) (default)
< | (-1,0)
^ | (0,1)
v | (0,-1)
/ | (x,y) -> (y,x)
\ | (x,y) -> (-y,-x)
| | (x,y) -> (-x,y)
_ | (x,y) -> (x,-y)
# | (x,y) -> (-x,-y)
; | (0,0)
(1,0)
เท่าที่สังเกตปลาเริ่มเคลื่อนไหวจากซ้ายไปขวาคือมีทิศทางเวกเตอร์ ปลาเริ่มแยกคำสั่งที่เริ่มต้นด้วยคำสั่งแรกที่เห็นและเปลี่ยนทิศทางของมันหากคำสั่งตรงกับหนึ่งในตัวเปลี่ยนทิศทางดังกล่าวข้างต้น
ปลาหยุดเคลื่อนไหวเมื่อเห็น;
และยุติโปรแกรม
อินพุต
อินพุตจะเป็นโปรแกรมที่ถูกต้อง (เช่นไม่วนซ้ำไม่ จำกัด ) ที่กำหนดผ่าน STDIN คุณสามารถอ่านไฟล์ได้หากต้องการ บรรทัดของแต่ละโปรแกรมไม่จำเป็นต้องมีความยาวเท่ากัน
อินพุตถูกกำหนดเป็นสตริงโดยมีบรรทัดใหม่คั่นแต่ละบรรทัดในโปรแกรม
;
โปรแกรมจะไม่ห่วงซึ่งหมายความว่าพวกเขามักจะบอกเลิกกับ
เอาท์พุต
เอาต์พุตจะเป็นโปรแกรมเชิงเส้น นั่นคือคุณควรคืนอักขระทั้งหมด (รวมถึงตัวเปลี่ยนทิศทาง) ที่ปลาจะดูว่ามันรันโปรแกรม "ปกติ" หรือไม่ ;
นี่คือทั้งหมดของตัวละครในเส้นทางของมันไป
หากอินพุตมีเส้นที่มีความยาวไม่เท่ากันและปลาเคลื่อนที่ไปตามเส้นที่สั้นกว่าความยาวของเส้นที่ยาวที่สุดคุณควรปฏิบัติต่อราวกับว่าปลากำลังเคลื่อนที่ข้ามอวกาศ (ดูกรณีทดสอบ)
ผู้ที่คุ้นเคยกับ> <> จะรู้ว่าตัวเปลี่ยนทิศทางไม่ใช่วิธีเดียวที่จะทำการเคลื่อนไหว แต่สำหรับความเรียบง่ายนั้นจะถือว่าอินพุตเป็นเสมือนว่าเป็นวิธีเดียวที่จะส่งผลกระทบต่อการเคลื่อนไหว
กฎระเบียบ
- ช่องโหว่มาตรฐานใช้
- คุณสามารถเขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบได้
- อินพุตถูกส่งผ่าน STDIN หรือไฟล์เป็นสตริงที่มีบรรทัดโปรแกรมคั่นด้วยบรรทัดใหม่ (
\n
)- คุณอาจรับอินพุตที่แตกต่างกันด้วยเหตุผล (อย่าลังเลที่จะถามฉันว่าคุณมีประเภทของข้อมูลเฉพาะในใจ) คุณไม่สามารถใส่อินพุตด้วยช่องว่างเพื่อให้ความยาวบรรทัดตรงกัน
- อ้างถึงโพสต์เมตานี้เกี่ยวกับการป้อนข้อมูลที่มีความยืดหยุ่น ตามที่โพสต์หมายถึงฉันทามติทั่วไปจะมีความยืดหยุ่นมากที่สุดเท่าที่จะทำได้ภายในเหตุผล
- เอาต์พุตเป็นสตริงเดี่ยวผ่าน STDOUT หรือส่งคืนโดยฟังก์ชัน (ขึ้นอยู่กับสิ่งที่คุณเลือกที่จะทำดูกฎ 2)
กรณีทดสอบ
v >v
>abcv//;
gfed<^ih
v>abcv<defghi^//>v;
v >v
>abcv//;
gfed<^
v>abcv<defg ^//>v;
abcdef;
abcdef;
abcd|;
abcd|dcba;
abcd#;
abcd#dcba;
abcd\;
_
abcd\_\dcba;
^;
>abcde/
^jihg<
^ >abcde/ <ghij^a;
;
;