ปัญหาการจำนำที่หายไป
หลังจากเกมหมากรุกสิ้นสุดลงเบี้ยที่รอดตายก็ถูกทิ้งไว้เบื้องหลังแนวศัตรู มาช่วยเขาหาทางกลับบ้านให้เร็วที่สุด
ปัญหาเดิมอธิบายกระดาน "หมากรุก" nXn และฟังก์ชั่นf: {1,..,n-1}X{1,..,n}X{-1,0,1} => R+
ของน้ำหนัก เป้าหมายคือการหาเส้นทางที่ดีที่สุดจากบางช่องในแนว buttom ไปยัง square อื่น ๆ ใน top line ซึ่งการเคลื่อนไหวที่เป็นไปได้คือ: left-up, up, right-up และคุณไม่สามารถออกจากกระดานได้
ปัญหาค่อนข้างง่ายในการแก้ปัญหาใน O (n ^ 2) โดยใช้การเขียนโปรแกรมแบบไดนามิก แต่นี่คือ codegolf และเราไม่สนใจสิ่งที่ไร้ประโยชน์เช่นความซับซ้อนของเวลาทำงาน ...
ปัญหา
อินพุต:อาร์เรย์ 3 มิติ (หรือคอลเลกชันอื่น ๆ ที่คุณเลือกได้รับผ่าน stdin หรือเป็นอาร์กิวเมนต์ของฟังก์ชัน) สอดคล้องกับกระดานหมากรุกทั่วไปขนาด: 7X8X3 (#linePasses X #rowSize X #movePerPass) จำนวนเต็มไม่เป็นลบ การย้ายค่าใช้จ่ายจากบางตำแหน่ง(i,j)
ที่i
เป็นดัชนีแถวและj
เป็นดัชนีคอลัมน์คือ:
a[i][j][0]
สำหรับค่าใช้จ่ายในการเดินทางขึ้นไปทางซ้ายไปที่ตารางหรือกราฟิก:(i+1,j-1)
\
a[i][j][1]
สำหรับค่าใช้จ่ายในการเดินทางขึ้นไปที่ตารางหรือกราฟิก:(i+1,j)
|
a[i][j][2]
สำหรับค่าใช้จ่ายในการเดินทางขึ้นทางขวาไปที่ตารางหรือกราฟิก:(i+1,j+1)
/
MAX_INT
คุณอาจคิดว่ามันจะไม่ประกอบด้วยเส้นทางที่จำนวนเงินที่มากกว่า
เอาต์พุต: เอาต์พุต 8X8 ascii แสดงเส้นทางที่ดีที่สุด (สั้นที่สุดคือผลรวมของน้ำหนักขั้นต่ำ) (หากมีผลลัพธ์ที่เหมาะสมมากกว่า 1 รายการคุณอาจแสดงเส้นทางที่คุณเลือกเอง) เส้นทางถูกวาดจากล่างขึ้นบนซึ่งในแต่ละบรรทัดอักขระที่สอดคล้องกับตำแหน่งของจำนำในเส้นทางเป็นสิ่งที่มันกำลังจะทำ เช่นหากตัวจำนำกำลังจะเลื่อนขึ้น - ซ้ายจากคอลัมน์ 3 (ไปยังคอลัมน์ 2) คุณควรวาด:
#?######
##\#####
ตำแหน่งที่?
ควรถูกแทนที่ด้วยการย้ายครั้งต่อไป X
ตำแหน่งสุดท้ายจะต้องมีการวาดเป็น
ตัวอย่าง
การป้อนข้อมูล:
[
[[1,1,1],[1,1,1],[0,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,0],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,0],[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,1],[1,0,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[1,1,1],[1,1,1],[1,1,1],[0,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]]
]
เอาท์พุท:
##X#####
###\####
###|####
###|####
##/#####
#/######
#|######
##\#####
การป้อนข้อมูล:
[
[[41,27,38],[12,83,32],[50,53,35],[46,32,26],[55,89,82],[75,30,87],[2,11,64],[8,55,22]],
[[56,21,0],[83,25,38],[43,75,63],[56,60,77],[68,55,89],[99,48,67],[94,30,9],[62,62,58]],
[[23,18,40],[24,47,61],[96,45,72],[71,6,48],[75,63,98],[93,56,51],[23,31,30],[49,34,99]],
[[20,47,42],[62,79,72],[32,28,44],[68,61,55],[62,39,57],[4,17,49],[97,85,6],[91,18,12]],
[[51,50,11],[32,39,56],[12,82,23],[33,88,87],[60,55,22],[29,78,14],[70,11,42],[63,94,67]],
[[75,64,60],[27,79,86],[70,72,56],[55,45,32],[95,67,12],[87,93,98],[81,36,53],[38,22,93]],
[[31,80,50],[77,71,22],[59,46,86],[64,71,53],[41,19,95],[62,71,22],[92,80,41],[26,74,29]]
]
เอาท์พุท:
######X#
#####/##
####/###
#####\##
#####|##
######\#
######|#
#######\
นี่คือรหัส - กอล์ฟดังนั้นรหัสที่สั้นที่สุดชนะ
เล่นอย่างยุติธรรม. ไม่มีช่องโหว่ ...
แก้ไข:
Iv'e เขียนคำตอบตรงๆที่ไม่ตีกอล์ฟในสกาล่าคุณสามารถดูได้ นอกจากนี้ยังมีไซต์ที่คุณสามารถเล่นด้วยโค้ดสกาล่าออนไลน์: scalakata (เพียงแค่คัดลอกและวางส่วนสำคัญไปยัง scalakata และกดปุ่มเล่น)