यदि आप नहीं जानते कि हनोई का टॉवर क्या है, तो मैं इसे संक्षेप में समझाता हूँ: तीन छड़ें हैं और कुछ डिस्क जिनमें से प्रत्येक का आकार अलग है। शुरुआत में सभी डिस्क पहले टॉवर पर हैं, क्रमबद्ध क्रम में: सबसे बड़ा सबसे नीचे है, सबसे ऊपर सबसे छोटा। लक्ष्य सभी डिस्क को तीसरी रॉड पर लाना है। आसान लगता है? यहाँ पकड़ है: आप एक डिस्क के ऊपर एक डिस्क नहीं रख सकते हैं जो अन्य डिस्क से छोटा है; आप उन्हें एक रॉड पर ले जाने के लिए एक समय में केवल एक डिस्क को अपने हाथ में पकड़ सकते हैं और आप केवल डिस्क को रॉड पर रख सकते हैं, न कि टेबल पर, आप कमीनों को डरपोक बनाते हैं।
एससीआई उदाहरण समाधान:
A B C
| | |
_|_ | |
__|__ | |
A B C
| | |
| | |
__|__ _|_ |
A B C
| | |
| | |
| _|_ __|__
A B C
| | |
| | _|_
| | __|__
चुनौती
तीन छड़ें हैं जिन्हें ए, बी और सी कहा जाता है (आप उन्हें 1,2 और 3 को सम्मानजनक रूप से कॉल भी कर सकते हैं यदि वह मदद करता है) शुरुआत में सभी एन डिस्क रॉड ए (1) पर हैं।
आपकी चुनौती हनोई के टॉवर के लिए एक समाधान को सत्यापित करना है। आपको यह सुनिश्चित करने की आवश्यकता होगी कि:
- अंत में सभी एन डिस्क रॉड सी (3) पर हैं।
- किसी भी राज्य में किसी भी डिस्क के लिए इसके नीचे कोई छोटी डिस्क नहीं है।
- खाली रॉड से डिस्क ले जाने की कोशिश करने या किसी भी तरह की कोई भी त्रुटि नहीं होने जैसी कोई स्पष्ट त्रुटि नहीं है।
(समाधान का इष्टतम होना आवश्यक नहीं है।)
इनपुट
आपके कार्यक्रम को दो इनपुट प्राप्त होंगे:
- डिस्क की संख्या n (पूर्णांक)
जो चालें ली जाती हैं, जिसमें टुपल्स का एक सेट शामिल होगा: (टॉवर वर्तमान में ऊपर से डिस्क को ऊपर ले जाने के लिए), (टॉवर इस डिस्क को लेने के लिए) जहां प्रत्येक ट्यूपल एक चाल को संदर्भित करता है। आप चुन सकते हैं कि उनका प्रतिनिधित्व कैसे किया जाता है। उदाहरण के लिए n = 2 के लिए समाधान का प्रतिनिधित्व करने के निम्नलिखित तरीकों की तरह कुछ है जो मैंने ऊपर एएससीआई में खींचा है। (मैं परीक्षण मामलों में पहले एक का उपयोग करूंगा, क्योंकि यह आंखों पर आसान है):
"ए-> बी; ए-> सी; बी-> सी"
[( 'ए', 'बी'), ( 'ए', 'सी'), ( "बी", "सी")]
[(1,2), (1,3), (2,3)]
"ABACBC"
[1,2,1,3,2,3]
उत्पादन
सच्चाई, अगर स्थितियाँ "चुनौती" के तहत मिल सकती हैं।
झूठे, अगर वे नहीं करते हैं।
परीक्षण के मामलों:
सच:
n=1, "A->C"
n=1, "A->B ; B->C"
n=2, "A->B ; A->C ; B->C"
n=2, "A->C ; C->B ; A->C ; B->C"
n=2, "A->C ; A->B ; C->B ; B->A ; B->C ; A->C"
n=3, "A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; A->C"
n=4, "A->B ; A->C ; B->C ; A->B ; C->A ; C->B ; A->B ; A->C ; B->C ; B->A ; C->A ; B->C ; A->B ; A->C ; B->C"
असत्य:
3rd @MartinEnder द्वारा सुझाया गया, @Joffan द्वारा 7 वां
n=1, "A->B"
n=1, "C->A"
n=2, "A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; A->C"
n=2, "A->B ; A->C ; C->B"
n=2, "A->C ; A->B ; C->B ; B->A"
n=2, "A->C ; A->C"
n=3, "A->B ; A->D; A->C ; D->C ; A->C"
n=3, "A->C ; A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; A->C"
n=3, "A->C ; A->B ; C->B ; A->B ; B->C ; B->A ; B->C ; A->C"
n=3, "A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; C->B"
n=4, "A->B ; A->C ; B->C ; A->B ; C->A ; C->B ; A->B ; A->C ; B->C ; B->A ; C->A ; B->C ; A->B ; A->C"
n=4, "A->B ; A->B ; A->B ; A->C ; B->C ; B->C ; B->C"
यह कोड-गोल्फ है , सबसे छोटा समाधान जीतता है। मानक नियम और खामियां लागू होती हैं। कोई बैटरी शामिल नहीं है।
A->A
?
moving discs to nonexistant rods.
हां के लिए जांचना होगा , यह एकD
A=1
,B=2
,C=3
, आदि)?