इस कोड-चुनौती के लिए विचार सरल है: पूर्णांक का एक मैट्रिक्स दिया गया है, चलो इसे रुबिक-शैली के आंदोलनों को लागू करके क्रमबद्ध करें। इसका मतलब है कि आप किसी एक पंक्ति या स्तंभ का चयन कर सकते हैं और उसके तत्वों को किसी भी दिशा में घुमा सकते हैं:
[1, 3, 2, 4] => [3, 2, 4, 1] (rotate left for rows/up for columns)
[1, 3, 2, 4] => [4, 1, 3, 2] (rotate right for rows/down for columns)
इसलिए, किसी भी आयाम के पूर्णांक का एक मैट्रिक्स दिया गया है, केवल इन रूबिक-शैली परिवर्तनों को लागू करने वाले तत्वों को छाँटें। एक मैट्रिक्स
माना जाएगा कि क्या उसके तत्व निम्नलिखित प्रतिबंधों का पालन करते हैं:
आई / ओ
- इनपुट पॉजिटिव पूर्णांकों का एक मैट्रिक्स होगा जिसमें कोई दोहराया हुआ मान नहीं होगा।
- आउटपुट इसे सॉर्ट करने के लिए आवश्यक मूवमेंट होगा। जैसा कि यह एक कोड गोल्फ चुनौती नहीं है और आपको इसकी लंबाई के बारे में चिंता करने की आवश्यकता नहीं है, हर आंदोलन के लिए प्रस्तावित प्रारूप वह है
#[UDLR]
जहां#
स्थानांतरित करने के लिए पंक्ति या स्तंभ की संख्या (0-अनुक्रमित) है और इसमें[UDLR]
एक एकल वर्ण है वह सीमा जो निर्दिष्ट करता है कि आंदोलन ऊपर (नीचे) (कॉलम के लिए) है या बाएं / दाएं (पंक्तियों के लिए)। तो1U
इसका मतलब होगा "1-वें कॉलम को ऊपर की ओर1R
ले जाना " लेकिन "1-वें पंक्ति को दाईं ओर ले जाना" होगा। आंदोलनों को अल्पविराम से अलग किया जाएगा, इसलिए एक समाधान इस तरह व्यक्त किया जाएगा1R,1U,0L,2D
:।
स्कोरिंग
मैट्रिक्स को इस तरह से सॉर्ट करने की कोशिश करना महंगा हो सकता है क्योंकि इसमें कई तरह के संभावित संयोजन होते हैं, और इसमें कई तरह की संभावित सूचियाँ भी होती हैं जो इसे सॉर्ट कर सकती हैं, इसलिए लक्ष्य कुछ कोड लिखना है जो N * को टाइप करते हैं। नीचे एन मैट्रिसेस। स्कोर सबसे बड़ा आकार एन होगा जिसे आप त्रुटियों के बिना 1 समय की उचित मात्रा में हल कर सकते हैं (मैट्रिक्स का आकार जितना अधिक होगा, उतना बेहतर)। एक टाई के मामले में, टाई-ब्रेकर आपके पाया पथ में आंदोलनों की संख्या (कम पथ, बेहतर) होगा।
उदाहरण: यदि कोई उपयोगकर्ता A = N = 5 के लिए समाधान खोजता है और B N = 6 के लिए कोई समाधान खोजता है, तो B दोनों रास्तों की लंबाई की परवाह किए बिना जीत जाता है। यदि वे दोनों N = 6 के लिए समाधान खोजते हैं, लेकिन A द्वारा पाए गए समाधान में 50 चरण हैं और B के समाधान में 60 चरण हैं, तो A जीत जाता है।
आपके कोड कैसे काम करते हैं, इस बारे में स्पष्टीकरण दिया गया है और कृपया प्राप्त किए गए समाधानों को पोस्ट करें ताकि हम उनका परीक्षण कर सकें । यदि समाधान बहुत बड़े हैं, तो आप पास्टबिन या इसी तरह के उपकरणों का उपयोग कर सकते हैं । साथ ही, आपके समाधान खोजने के लिए आपके कोड द्वारा खर्च किए गए समय का एक अनुमान की सराहना की जाएगी।
परीक्षण के मामलों
निम्नलिखित मैट्रिसेस ( अधिक कॉपी-पेस्ट करने योग्य संस्करण के लिए पास्टबिन लिंक ) बनाया गया है जो पहले से छँटे हुए मैट्रिसेस से शुरू करके उन्हें 10K रैंडम, रुबिक-शैली के आंदोलनों के साथ जोड़कर बनाया गया है:
प्लेनटेक्स्ट टेस्ट मामले:
[[8, 5, 6], [11, 10, 1], [3, 15, 13]]
[[21, 10, 12, 16], [17, 6, 22, 14], [8, 5, 19, 26], [13, 24, 3, 1]]
[[1, 13, 8, 16, 5], [9, 40, 21, 26, 22], [11, 24, 14, 39, 28], [32, 19, 37, 3, 10], [30, 17, 36, 7, 34]]
[[34, 21, 40, 22, 35, 41], [18, 33, 31, 30, 12, 43], [19, 11, 39, 24, 28, 23], [44, 1, 36, 5, 38, 45], [14, 17, 9, 16, 13, 26], [8, 3, 47, 6, 25, 4]]
[[20, 36, 17, 1, 15, 50, 18], [72, 67, 34, 10, 32, 3, 55], [42, 43, 9, 6, 30, 61, 39], [28, 41, 54, 27, 23, 5, 70], [48, 13, 25, 12, 46, 58, 63], [52, 37, 8, 45, 33, 14, 68], [59, 65, 56, 73, 60, 64, 22]]
[[85, 56, 52, 75, 89, 44, 41, 68], [27, 15, 87, 91, 32, 37, 39, 73], [6, 7, 64, 19, 99, 78, 46, 16], [42, 21, 63, 100, 4, 1, 72, 13], [11, 97, 30, 93, 28, 40, 3, 36], [50, 70, 25, 80, 58, 9, 60, 84], [54, 96, 17, 29, 43, 34, 23, 35], [77, 61, 82, 48, 2, 94, 38, 66]]
[[56, 79, 90, 61, 71, 122, 110, 31, 55], [11, 44, 28, 4, 85, 1, 30, 6, 18], [84, 43, 38, 66, 113, 24, 96, 20, 102], [75, 68, 5, 88, 80, 98, 35, 100, 77], [13, 21, 64, 108, 10, 60, 114, 40, 23], [47, 2, 73, 106, 82, 32, 120, 26, 36], [53, 93, 69, 104, 54, 19, 111, 117, 62], [17, 27, 8, 87, 33, 49, 15, 58, 116], [95, 112, 57, 118, 91, 51, 42, 65, 45]]
कृपया और अधिक पूछें यदि आप उन सभी को हल करते हैं। :-) और उन लोगों के लिए बहुत धन्यवाद जिन्होंने मुझे सैंडबॉक्स में रहते हुए इस चुनौती को परिष्कृत करने में मदद की ।
1 समय की एक उचित राशि: समय की कोई भी राशि जो आपके समाधान का परीक्षण करते समय हमारे धैर्य को कम नहीं करती है। ध्यान दें कि TIO केवल 60 सेकंड के लिए कोड चलाता है, उस सीमा से अधिक समय तक हमें अपनी मशीनों में कोड का परीक्षण करना होगा। उदाहरण: मेरे बजाय अक्षम एल्गोरिथ्म क्रम 3x3 और 4x4 के मैट्रिक्स को हल करने के लिए कुछ मिलीसेकंड लेता है, लेकिन मैंने इसे सिर्फ 5x5 मैट्रिक्स के साथ परीक्षण किया है और इसे हल करने में 317 सेकंड का समय लगा (5 मिलियन से अधिक आंदोलनों में, बहुत ही अजीब अगर हम समझते हैं कि मैट्रिक्स को हल करने के लिए केवल 10K बार स्क्रैम्बल किया गया था )। मैंने आंदोलनों की संख्या को 10K से कम करने की कोशिश की, लेकिन मैंने कोड निष्पादित करने के 30 मिनट बाद आत्मसमर्पण कर दिया।
O(input size)
समय में इनपुट-आकार क्या होगा ? 5x5 मैट्रिक्स के लिए यह होगा O(25)
? यह बहुत तेज़ प्रतीत होता है, इसलिए मुझे उस एल्गोरिथ्म या आपके कार्यान्वयन को देखने के लिए बहुत दिलचस्पी होगी। संपादित करें: आप महसूस करते हैं कि हम 'तले हुए' मैट्रिक्स को इनपुट करते हैं और आंदोलनों को आउटपुट करते हैं, है ना? कोई और रास्ता नही।