สุนัขของฉันเห่าใส่ฉัน แต่ฉันขี้เกียจเกินไปที่จะพาเขาไปเดินเล่น ฉันมีความคิด! ฉันจะให้คนที่ Code Golf ทำเพื่อฉัน!
ความท้าทายของคุณคือการจำลองการเดินสุนัข นี่คือกฎสำหรับการเดินสุนัข:
- มนุษย์ (
H) จะเริ่มต้น0,0บนระนาบพิกัด (คาร์ทีเซียน) และจะสุ่มหนึ่งช่องว่างขึ้นไปซ้ายขวาหรือลงทุก ๆ วินาที - สุนัข (
D) จะเริ่มต้นที่ตำแหน่งเดียวกันและจะเป็นศูนย์เว้นวรรคหนึ่งสองหรือสามขึ้นไปซ้ายขวาหรือลงทุกวินาที (สุ่มแน่นอน) สุนัขสามารถคาดเดาได้น้อยลงและบางครั้งจะทำงานได้เร็วขึ้นหรือหยุดอย่างสมบูรณ์ - สุนัขจะไม่ได้รับมากกว่าจำนวนหนึ่งของหน่วยห่างจากมนุษย์ (ในระยะทางแบบยุคลิด) ซึ่งเป็นความยาวของสายจูง (
L) ตัวอย่างเช่นถ้าLเป็น6ตำแหน่งที่ถูกต้องจะเป็นH(0,0) D(4,4)(เนื่องจากระยะทางประมาณ 5.65 หน่วย) แต่ไม่ใช่H(0,0) D(5,4)(ประมาณ 6.4 หน่วย)- ถ้าหากสุนัขเคลื่อนไหวจะเป็นการละเมิดข้อกำหนดระยะห่างของสายจูงมันจะต้องไปให้ไกลที่สุดเท่าที่จะทำได้ในทิศทางที่กำหนดซึ่งไม่ละเมิดข้อกำหนดระยะทาง ตัวอย่างเช่นหากตำแหน่งอยู่
H(0,0) D(3,4)และสุนัขถูกสุ่มเลือกที่จะย้าย 3 ช่องว่างไปทางขวามันจะไปD(4,4)เนื่องจากเป็นจุดที่ไกลที่สุดที่สามารถไปได้โดยไม่ต้องไปไกลเกิน 6 หน่วย (โปรดทราบว่าสิ่งนี้อาจส่งผลให้เกิดการเคลื่อนที่ของช่องว่าง 0 นั่นคือไม่มีการเคลื่อนไหวเลย!)
- ถ้าหากสุนัขเคลื่อนไหวจะเป็นการละเมิดข้อกำหนดระยะห่างของสายจูงมันจะต้องไปให้ไกลที่สุดเท่าที่จะทำได้ในทิศทางที่กำหนดซึ่งไม่ละเมิดข้อกำหนดระยะทาง ตัวอย่างเช่นหากตำแหน่งอยู่
- กฎเบ็ดเตล็ด: การเคลื่อนไหวของมนุษย์ก่อน มนุษย์จะต้องไม่เกินความยาวของสายจูงขณะเคลื่อนที่ ถ้าเป็นเช่นนั้นจะต้องเลือกทิศทางอื่น "สุ่ม" หมายถึง "มีการแจกแจงแบบสม่ำเสมอและไม่มีรูปแบบ"
อินพุตจะได้รับในรูปแบบนี้ (สามารถเป็น STDIN, พารามิเตอร์ฟังก์ชัน, ไฟล์, ฯลฯ ):
"<amount of seconds the walk will last> <leash length>"
ตัวอย่างเช่น:
300 6 // a 5 minute walk with a 6 yard leash
คุณต้องให้ผลลัพธ์ในรูปแบบนี้ (สามารถเป็น STDOUT, ค่าส่งคืนของฟังก์ชัน, ไฟล์, ฯลฯ ):
H(0,0) D(0,0)
H(0,1) D(2,0)
H(1,1) D(2,1)
H(1,0) D(2,-1)
...
(จำนวนของเอาต์พุตบรรทัดจะเป็นseconds + 1เนื่องจากH(0,0) D(0,0)บรรทัดไม่นับ)
นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดเป็นไบต์จะเป็นผู้ชนะ!
