ฉันกำลังเล่นกับหุ่นยนต์อัตโนมัติและฉันพบสิ่งที่มีพฤติกรรมที่น่าสนใจ นี่คือวิธีการทำงาน:
มันอ่านสตริงไบนารีจากซ้ายไปขวาหากพบ1
ตามด้วย2
ค่าอื่น ๆ มันจะผนวก0
กับผลและอ่านต่อ หากพบ0
(หรือมีเหลือน้อยกว่า 3 ค่า) มันจะผนวกค่าปัจจุบันและ a 1
และอ่านต่อ ในตอนท้ายของสตริงมันจะผนวกหนึ่ง1
กับผลลัพธ์
นี่เป็นตัวอย่างผลงานของรุ่นหนึ่ง
01011111
^
เราพบกันครั้งแรก0
ดังนั้นเราจึงต่อท้าย01
ผลลัพธ์ของเรา
01011111
^
01
ตอนนี้เราได้พบกับ1
ดังนั้นเราจึงผนวกศูนย์และข้ามค่าสองค่าถัดไป
01011111
^
010
เราพบกัน1
ดังนั้นเราทำแบบเดียวกัน
01011111
^
0100
ตอนนี้เรามีพื้นที่อื่น1
แต่ไม่เพียงพอที่จะข้ามดังนั้นเราจึงผนวกเซลล์ปัจจุบันและ a 1
(ในกรณีนี้11
)
01011111
^
010011
เราอยู่ท้ายแล้วเราจึงผนวกหนึ่ง1
และยุติรุ่นนี้
01011111
^
0100111
งาน
การป้อนข้อมูลให้ในรูปแบบที่สมเหตุสมผลคุณต้องสร้างฟังก์ชั่นหรือโปรแกรมที่คำนวณหุ่นยนต์รุ่นหนึ่ง
นี่เป็นคำถามเกี่ยวกับรหัสกอล์ฟดังนั้นคำตอบจะได้คะแนนเป็นไบต์โดยมีจำนวนไบต์น้อยกว่าดีกว่า
การใช้งานตัวอย่าง
นี่คือตัวอย่างการใช้งานใน Haskell (กำหนดฟังก์ชั่นd
แต่โปรแกรมจะพิมพ์การทำซ้ำไปเรื่อย ๆ ):
d('1':_:_:x) = "0" ++ d x
d(a:x) = a:'1':d x
d x = "1"
r x = x:map d(r x)
10
มันควรจะพิมพ์11011
? ฉันคิดว่าอีกสองสามกรณีทดสอบจะเป็นประโยชน์