खोई हुई प्यादा समस्या
शतरंज का खेल समाप्त होने के बाद, एक जीवित मोहरा दुश्मन की रेखाओं के पीछे छोड़ दिया गया था। चलो उसे घर पर सबसे छोटा रास्ता खोजने में मदद करें।
मूल समस्या एक nXn "शतरंज" बोर्ड और f: {1,..,n-1}X{1,..,n}X{-1,0,1} => R+
वजन के एक फ़ंक्शन का वर्णन करती है । लक्ष्य नितंब रेखा में कुछ वर्ग से सबसे अच्छा रास्ता खोजने के लिए है, शीर्ष पंक्ति में कुछ अन्य वर्ग के लिए, जहां संभव चालें हैं: बाएं-ऊपर, ऊपर, दाएं-अप, और आप बोर्ड से बाहर नहीं निकल सकते हैं।
इस समस्या को ओ (एन ^ 2) में गतिशील प्रोग्रामिंग का उपयोग करके हल करना आसान है, लेकिन यह कोडगोल्फ है, और हम समय की जटिलता जैसे बेकार सामान की परवाह नहीं करते हैं ...
समस्या
इनपुट: एक नियमित रूप से शतरंज बोर्ड के अनुरूप 3-डिमेंशनल सरणी (या अपनी पसंद के कुछ अन्य संग्रह, एक फ़ंक्शन तर्क के रूप में), बिल्कुल आकार में: 7X8X3 (#linePasses X #mrowize X #movesPerPass) युक्त गैर-नकारात्मक पूर्णांक। चाल सूचकांक, और स्तंभ सूचकांक है, जहां कुछ स्थिति से लागत चलती है :(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 scala में आप देख सकते हैं एक un-golfed सीधे आगे समाधान लिखा है । एक ऐसी साइट भी है जिसे आप स्कैला कोड के साथ ऑन-लाइन खेल सकते हैं: स्कलाटाटा (बस स्कैलेकाटा को कॉपी और पेस्ट करें, और प्ले बटन दबाएं)