บทนำ
ความท้าทายในวันนี้เป็นเรื่องของฟัน โดยเฉพาะระยะเวลาในการแปรงจากฟันซี่หนึ่งไปยังฟันอื่น ความท้าทายของคุณคือการกำหนดตำแหน่งของฟันสองซี่ให้ได้ระยะเวลาที่สั้นที่สุดในการแปรงจากครั้งแรกไปยังวินาที
ท้าทาย
สำหรับความท้าทายนี้เราจะใช้เลย์เอาต์ของปากมนุษย์ที่เป็นผู้ใหญ่โดยเฉลี่ย:
แผนภาพนี้แสดงให้เห็นว่าใช้กันอย่างแพร่หลายระบบเลข ISO ระบบแบ่งปากออกเป็นสี่ส่วนและกำหนดแต่ละหมายเลข: ด้านบนขวา (1), ซ้ายบน (2), ซ้ายล่าง (3) และล่างขวา (4) จากนั้นจึงนับจำนวนฟันของแต่ละส่วนจากกลางปากตั้งแต่ 1-8 ดังนั้นฟันซี่ที่สี่จากจุดศูนย์กลางทางด้านขวาบน (ส่วนที่ 1) คือหมายเลขฟัน 14
สมมติว่าการแปรงฟันหนึ่งครั้งใช้เวลา 1 หน่วย การย้ายจากฟันซี่หนึ่งไปยังฟันข้างหนึ่งจะใช้เวลา 0 หน่วย นอกจากนี้คุณยังสามารถข้ามจากฟันไปยังฟันโดยตรงเหนือหรือใต้ฟันซึ่งใช้เวลา 1 หน่วย ดังนั้นคุณใช้แปรงจากฟัน 14 ถึงฟัน 31 นานเท่าไหร่? เมื่อดูจากแผนภาพด้านบนคุณจะเห็นว่าใช้เวลา 7 หน่วย นี่คือวิธีที่คำนวณ:
Action : Unit of time
Brushing tooth 14 : 1 unit
Brushing tooth 13 : 1 unit
Brushing tooth 12 : 1 unit
Brushing tooth 11 : 1 unit
Brushing tooth 21 : 1 unit
Cross to bottom of mouth : 1 unit
Brushing tooth 31 : 1 unit
------------------------------
Total: 7 units
โปรดทราบว่าเขาไม่ใช่เส้นทางเดียวที่เราสามารถทำได้ แต่ไม่มีเส้นทางที่สั้นกว่านี้
ดังนั้นความท้าทายของคุณคือ:
- คุณจะเขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบที่ยอมรับสองข้อโต้แย้งที่เป็นตัวเลขฟันและผลลัพธ์ (หรือผลตอบแทน) เวลาที่สั้นที่สุดในการแปรงจากที่หนึ่งไปยังอีก
- คุณป้อนข้อมูลเป็นตัวเลขหรือสตริงและแสดงผลตามที่คุณต้องการ ( ภายในวิธีการที่ยอมรับได้ )
- ช่องโหว่มาตรฐานจะถูกห้ามโดยค่าเริ่มต้น
- คำถามนี้คือcode-golfดังนั้น bytecount ที่สั้นที่สุดจึงชนะ
นี่คือตัวอย่างทดสอบ ( ขอบคุณ Jonathan Allan ):
14, 21 => 5 14, 44 => 3 14, 14 => 1 33, 37 => 5
โชคดี!
