क्या यह रूबिक्स क्यूब है?


25

पेडंट्स का एक उत्तीर्ण पास समय यह इंगित करना है कि "रूबिकस क्यूब्स" (टी-शर्ट, पोस्टर आदि पर) की तस्वीरें वास्तव में हल नहीं हैं।

पहली चीज जिसे जांचना चाहिए वह यह है कि क्यूब सही टुकड़ों से बना है। सॉल्व होने के लिए एक क्यूब को नौ वर्गों के साथ छह रंगों की आवश्यकता होती है। क्यूब को प्रत्येक किनारे और कोने की इकाई की आवश्यकता होती है (ये छोटे क्यूब्स हैं जो क्यूब बनाते हैं) अद्वितीय होने के लिए। न केवल वे अद्वितीय होने चाहिए, लेकिन अगर दो केंद्र टुकड़े एक दूसरे के विपरीत हैं तो किनारे या कोने का टुकड़ा उन दोनों रंगों को शामिल नहीं कर सकता है।

एक बार जब आपके पास एक क्यूब होता है जो सभी सही टुकड़ों से बना होता है तो आपको अभी भी यह सत्यापित करने की आवश्यकता होती है कि यह सॉल्व हो सकता है। यहां कुछ नियम हैं, इसलिए मैं उन्हें समझाने के लिए एक विशेषज्ञ को भेजूंगा, नीचे दिए गए स्पॉइलर बताते हैं कि हम यह कैसे कर सकते हैं। यदि आप अपने दम पर समस्या को हल करने में रुचि रखते हैं, तो आपको इस चुनौती को समझने या इसमें भाग लेने के लिए साइट पर जाने की आवश्यकता नहीं है।

जुड़ा हुआ स्पष्टीकरण

आपका कार्य इनपुट के रूप में एक पैटर्न लेना है और यह निर्धारित करना है कि क्या यह वास्तव में एक घुलने वाला रूबिक क्यूब है। सॉल्व होने के लिए एक क्यूब पर वैध चालें करने का एक तरीका होना चाहिए ताकि क्यूब के प्रत्येक चेहरे पर केवल एक ही रंग हो (और विभिन्न चेहरों के अलग-अलग रंग हों)। अधिकांश रुबिक के क्यूब्स में एक मानक रंग होता है (सफेद विपरीत पीला है, आदि) आप यह नहीं मान सकते हैं कि हल राज्य इस विशेष रंग का अनुसरण करता है।

एक मान्य चाल या तो घन के एकल मुख की दक्षिणावर्त या विरोधी घड़ी की दिशा में घूमती है। क्यूब के चेहरे के घूमने के साथ ही चेहरे की सीमा वाले किसी भी वर्ग को घुमाया जाता है, चेहरे से जुड़े रहने से वे पहले स्पर्श कर रहे थे।

आईओ

आप किसी भी उचित तरीके से घन ले सकते हैं। यदि आपकी भाषा में कुछ अंतर्निहित "क्यूब-फेस" प्रकार है, तो आपके लिए अच्छा है, जो इनपुट के रूप में ठीक है, अन्य बुद्धिमान आप नेट के 2 डी सरणी ले सकते हैं, क्यूब के 1, प्रत्येक चेहरे के लिए 3 सूचियों द्वारा 1 3। बस उचित हो। यदि आप यह जानना चाहते हैं कि क्या एक विशिष्ट प्रारूप स्वीकार्य टिप्पणी है या मुझे चैट में पिंग करता है और मैं इसकी वैधता को चुनौती देने के लिए जोड़ूंगा।

आपके इनपुट प्रारूप को केवल 9 संभावित रंगों का समर्थन करने की आवश्यकता है।

आउटपुट के लिए यह एक निर्णय समस्या है, इसलिए आपको "हां, यह एक वैध रूबिक क्यूब है" और "नहीं, यह एक वैध रूबिक्स क्यूब नहीं है" के लिए एक निरंतर मान का उत्पादन करना चाहिए।


यह इसलिए उत्तर बाइट में कम बाइट के साथ बेहतर स्कोर किए जाएंगे।

परीक्षण के मामलों

यहां परीक्षण के मामले हैं। उन्हें एक अक्षर के रूप में प्रत्येक वर्ग के साथ एक घन के जाल के रूप में स्वरूपित किया जाता है। अलग-अलग अक्षर अलग-अलग रंगों का प्रतिनिधित्व करते हैं। अनुरोध पर कोई और टेस्टकेस जोड़ा जा सकता है।

व्याख्या करने योग्य

   RRR
   RRR
   RRR
GGGWWWBBBOOO
GGGWWWBBBOOO
GGGWWWBBBOOO
   YYY
   YYY
   YYY


   GRR
   GRR
   ORW
WWRBWYBOOGGY
GGRBWGYBBOOO
OOGRWGYWWRBB
   WYO
   YYB
   YYB

न सुलझा हुआ

   RRR
   RRR
   RRR
GGGWWWBBBOOO
GGGWWWBBBOOO
GGGWYWBBBOOO
   YWY
   YYY
   YYY


   RRR
   RRR
   RRR
GGGWWWBBBOOO
GGGWWWBBBOOO
GGGWWWBBBOOO
   YWY
   YYY
   YYY


   RRR
   RRR
   GGG
GGYWYWRBBOBO
GGYWWWROBOOO
GGYWWWRBBOOO
   BBB
   YWY
   YYY


   RRW
   RRW
   GGG
GGYWWYEOBROO
GGYWWYEBBROO
GGOWWYWBBROO
   BBB
   YYW
   YYO

14
मैं यह बताने के लिए बाध्य हूं कि आपके अवतार में रूबिक का घन सॉल्व नहीं है। हमारे सामने की तरफ केवल 4 वर्ग हैं, जबकि एक सामान्य रूबिक क्यूब में 9. होना चाहिए। चौकों के ऊपर अजीब प्रतीकों का उल्लेख नहीं करना चाहिए।
DJMcMayhem

2
@DJMcMayhem मेरे बच्चों के पास केवल चार "उप-क्यूब्स" के साथ रूबिक के क्यूब्स हैं।
एडम

2
@ H.PWiz नहीं, आप नहीं कर सकते। यह मेरी परिभाषाओं में निहित था लेकिन मैं इसे प्रश्न में स्पष्ट कर दूंगा।
गेहूं जादूगर

2
आपके विनिर्देशन में क्यूब के तीन समता कानूनों का पूरा विवरण शामिल नहीं है। 1. केवल 1 किनारे का 180 डिग्री (फ़्लिप) में फ़ैल होना असंभव है। 2. केवल 1 कॉर्नर ट्विस्टेड 120 डिग्री (उल्लेखित नहीं) होना असंभव है। क्यूबियों का एक अजीब क्रमचय होना असंभव है (उल्लेख नहीं है)। )। यह हल होने तक मैं एक करीबी वोट डाल रहा हूं। स्पष्टीकरण के लिए ryanheise.com/cube/cube_laws.html देखें ।
लेवल रिवर सेंट

4
@LevelRiverSt ध्यान दें कि रूबिक का घन स्वयं निहित है, कोई भी स्वतंत्र रूप से गणितीय सूत्रीकरण और समता कानूनों को प्राप्त कर सकता है।
user202729

जवाबों:


14

मूल रूप से , 1664 1631 1089 बाइट्स

⇒FD2F'R'D2RUR'D2RFD2F'U'
⇒Ff1F'
⇒LFf1F'L'
⇒F'f1F
⇒F2f1F2
⇒L'F2f1F2L
⇒D'F'f1FD
⇒LR'FLR'DLR'B2L'RDL'RFL'RU2
⇒LFf8F'L'
⇒R'F'f8FR
⇒Ff8F'
⇒F'f8F
⇒ULU'f8UL'U'
⇒U'R'Uf8U'RU
⇒F2f8F2
⇒Df15D'
⇒D'f15D
⇒D2f15D2
⇒UF2UF2D'L2B2U'B2DL2F2D2B2D2F2
⇒U'DL2UD'B2
⇒UF2UF2D'L2B2D'R2UR2F2D2B2U2B2
⇒BL'BU2D2F'RF'U2D2
⇒LD'F2U'B2U'RU2R'F2R2F2D'R2DF2D
⇒B2URB2D2B2RB2U'D'L2D'B2
⇒B2LF'U'B2UFL'R2B2U'D2L2D'B2U
⇒B2RB2D2B2RB2U'L2UD'F2U'F2B2
⇒D2R'FUB2U'F'RU2B2D'F2R2UF2UF2
⇒B2R2U'L'D2B2U2R'U2R2F2L2R2UR2
⇒D2L'B2U2F2RUL2U'F2R2U'R2U2F2DL2D'
⇒UB2U'L2DL2B2DB2D'B2
⇒BR'BL2B'RBL2B2
⇒UF2B2U'F2B2U'F2L2R2B2R2
⇒R2U'F2DR2UF2D'R2DF2R2D'F2
⇒U'F2DF2UL2F2DL2DF2L2D2F2
⇒U2D'L2U'F2L2U'B2L2R2U'L2B2
⇒F2D'R2U2L2B2UF2L2U2F2L2UF2R2
⇒[f1]3
⇒[f2f37]3
⇒[f3f38]3
⇒[f4f39]3
⇒[f5f40]3
⇒[f6f41]3
⇒[f7f42]3
⇒[f8f43]2
⇒[f9f44]2
⇒[f10f45]2
⇒[f11f46]2
⇒[f12f47]2
⇒[f13f48]2
⇒[f14f49]2
⇒[f15f50]2
⇒[f16f51]2
⇒[f17f52]2
⇒[f18f53]2
⇒[f19f54]2
⇒[f20f55]3
⇒[f21f56]4
⇒[f22f57]5
⇒[f23f58]6
⇒[f24f59]7
⇒[f25f60]8
⇒[f26f61]9
⇒[f27f62]9[f27f62]2
⇒[f28f63]9[f28f63]3
⇒[f29f64]9[f29f64]4
⇒[f30f65]2
⇒[f31f66]3
⇒[f32f67]4
⇒[f33f68]5
⇒[f34f69]6
⇒[f35f70]7
rs[f36f71]8

आउटपुट अगर सॉल्वेबल: Solved!
आउटपुट न हो तो बेकार: (खाली, कोई आउटपुट नहीं)

इनपुट को क्यूबिकली क्यूब-डंप ( Debugअनुभाग देखें ) के रूप में स्वरूपित किया जाना चाहिए । यह ओपी द्वारा स्पष्ट रूप से अनुमति दी गई थी

व्याख्या

यह कार्यक्रम हल किए गए घन के समान समूह में क्यूब के हर संभव स्थिति पर पुनरावृति करने के लिए डेविल्स एल्गोरिथम का उपयोग करने का दृष्टिकोण लेता है । यदि क्यूब सॉल्व है, तो यह एल्गोरिथम समाप्त होने से पहले कुछ बिंदु पर हल हो जाएगा (यह मानकर कि एल्गोरिथम मैंने ठीक से काम किया है)।

हर पंक्ति जिसकी शुरुआत (घन के कोडपेज में 0x84) है, एक फ़ंक्शन परिभाषा है; ये कार्य वास्तविक शैतान के एल्गोरिथ्म को बनाने के लिए एक दूसरे से दूर होते हैं। निष्पादित होने वाली पहली पंक्ति अंतिम है:

rs[f36f71]8

rस्टड से एक क्यूब पढ़ता है और मेमोरी क्यूब को उसमें सेट करता है। sदुभाषिया को "सॉल्वोडोड" में डालता है, जिसका अर्थ है कि यह बाहर निकलता है और प्रिंट करता है Solved!अगर किसी भी बिंदु पर घन हल हो जाता है (अनसुलझी होने के बाद)। शेष कमांड (जो केवल f36f718 बार दोहराते हैं ) लिंक किए गए पृष्ठ के नीचे अंतिम एल्गोरिथ्म के अनुरूप हैं:

(D) = (CP) = (CPT8) = [(CPC8)(CPT7)]8 (3,847,762,288,469,010,006,992 moves)

(D) is the Devil's Algorithm. If you apply it to the cube, it will be solved at some point before you have done the algorithm once. As you can see, it is terribly long, nearly a thousand times more moves than there are possible positions.

मैं इसे कैसे चला सकता हूं?

आप इसे ऑनलाइन आज़मा सकते हैं , लेकिन यह लिंक काम नहीं करता है। इस एल्गोरिथ्म के पूरा होने से पहले TIO लगभग निश्चित रूप से समय समाप्त कर देगा (दुभाषिया के लिए अधिकतम रनटाइम 60 सेकंड है)। यदि क्यूब सॉल्व नहीं होता है, तो यह एल्गोरिथ्म क्यूबिकली समाप्त होने के लिए 11 मिलियन वर्ष तक का समय लेगा (प्रति ~ 15.2 मिलियन मूव्स पर, जो कि मेरा Cloud9 IDE है)।

इसके अतिरिक्त, आपको 3 सेक्स्टिलियन मूव्स करने के लिए बहुत अधिक मेमोरी की आवश्यकता होती है। मूल रूप से प्रति सेकंड लगभग 4 मिलियन चालें प्रदर्शन कर सकती हैं, लेकिन इस प्रक्रिया की अधिकता से स्मृति के मारे जाने की संभावना होगी । यह मेरे वीएम पर 512 एमबी मेमोरी के साथ 15 सेकंड के बाद मर जाता है। पहले से आवंटित फ्लैट ऐरे कॉस्ट मेमरी पर मूव्स क्यों करना चाहिए? एक मिले स्मृति रिसाव (या बीस) और यह तय हो गई

यहाँ एक बहुत अधिक पठनीय संस्करण है जो उसी तरह व्यवहार करता है।

लेकिन मैं वास्तव में देखना चाहता हूं कि यह काम करता है!

इस शैतान के एल्गोरिथ्म में निष्पादित होने वाला पहला वास्तविक कदम है F2, इसलिए हल करने के लिए सबसे तेज़ क्यूब एक होगा F2:

   000
   000
   555
113222133444
113222133444
113222133444
   000
   555
   555

यह वास्तव में TIO पर 0.007 सेकंड में निष्पादित होता है ।

इसे कैसे सुधारा जा सकता है?

निश्चित रूप से अधिक शैतान के एल्गोरिदम हैं; मैंने पाया है कि चालों की एक तिहाई से कम का उपयोग करता है जो यह करता है। हालाँकि, यह कई हज़ार बाइट्स (लगभग 100MB अधिक) और कई दर्जन घंटे कॉम्प्लेक्स हैमिल्टनियन सर्किट को क्यूबिक कोड में बदलने की लागत पर आएगा।

कुछ कार्यों को निकालना और उन्हें सीधे नीचे लूप में रखना भी संभव है। हालांकि, मैं कुछ पठनीयता के लिए कुछ बाइट्स का त्याग करने जा रहा हूं।

इसके अतिरिक्त, मैं क्युबिकली लूपिंग व्यवहार को संशोधित करने पर विचार कर रहा हूं ताकि मैं एल्गोरिदम को 7 या 8 बार आसानी से दोहरा सकूं (बजाय केवल हार्ड-कोडिंग के साथ फ़ंक्शन कॉल के साथ स्रोत में 7 या 8 बार दोहराया गया)। या मैं नोटपैड के साथ कुछ जादू बाहर काम करूंगा, और अधिक लूप का उपयोग करके इसे गोल्फ करूंगा।

ध्यान दें कि मैं दुभाषिया में कुछ भी संभव अनुकूलन करना जारी रखूंगा, इसलिए यह भविष्य में किसी समय औसत पीसी पर काम कर सकता है!


मूल रूप से, 2 बाइट्स

r▦

मैं उपरोक्त उत्तर को बेहतर तरीके से पसंद करता हूं इसलिए मैं इसे वैकल्पिक समाधान के रूप में जोड़ रहा हूं। यह एक सेकंड के तहत चलता है, जैसा कि कुछ मिलियन वर्षों के विपरीत है।

r    read cube from standard in
 ▦   and solve it

क्यूब सॉल्व होने पर आउटपुट : (कुछ नहीं)
क्यूब अनसॉल्व होने पर आउटपुट: Error: The cube has reached an unsolvable state.


क्या यह काम करता है अगर हम पक्षों की अदला-बदली करते हैं? उदाहरण के लिए क्यूब डंप में 2 विपरीत 4 है, क्या यह काम करता है यदि 2 5 के विपरीत है और 4 विपरीत 0 है?
गेहूं जादूगर

1
@WheatWizard हाँ यह करता है, अगर प्रत्येक चेहरे में एक अद्वितीय पूर्णांक है, तो सोल्वोड जाँच करता है, और यदि पूर्णांक चेहरे पर केवल एक ही है।
एमडी एक्सएफ

ठीक है, जैसा कि यह चाहिए। मैं यह जानने के लिए कि क्या यह मामला था या नहीं आपके विवरण से स्पष्ट रूप से परिचित नहीं था।
गेहूं जादूगर

@HeatWizard केवल यह सुनिश्चित कर रहा है कि मैं आपको सही ढंग से समझता हूं - यह (की तर्ज पर) जो आप जिक्र कर रहे थे, क्या वह सही है?
एमडी एक्सएफ

हाँ। और यह सॉल्व होना चाहिए।
गेहूं जादूगर

4

एपीएल (डायलॉग क्लासिक) , 190 174 बाइट्स

{∧/~∊(×1 2 3|+.-⌿↑⊃∘⍋¨¨¨a)({2|≢∪{⍵⌊⍵[⍵]}⍣≡⍵,0}¨⍳⌿↑⌽b)((∪≢∩)¨/b←(⊃∘⍋⌽⊢)¨¨¨a),6≢≢∪⊃⊃a←{c4⍴⊂⍬⋄c[+/1≠i],←(≠/×i←↑⍳33){⊂⌽⍣⍺⊢⍵~' '}¨,⌿(3|∘.+⍨⍳3)⍉⍤¯11 0 1\⍵1c}¨⍵(3 3∘⍴¨1 1∘⌷¨⍵)}

इसे ऑनलाइन आज़माएं!

तर्क 3x3 वर्ण मैट्रिक्स का एक 3x2 मैट्रिक्स (row0: front back, row1: left right, row2: up down) है। एक सॉल्व रुबिक के क्यूब के लिए 1, 0 अन्यथा।

TIO लिंक में, फ़ंक्शन t, जो वर्ण गणना में शामिल नहीं है, इनपुट की 9 पंक्तियों को पढ़ता है, उन्हें डिफ़ॉल्ट इनपुट प्रारूप (एक नेट) से आवश्यक 3x2 x 3x3 मैट्रिक्स में परिवर्तित करता है, समाधान को कॉल करता है और यदि परिणाम प्रिंट करता है तो ठीक है उम्मीद के मुताबिक है।

एल्गोरिथम दिए गए क्यूब को 26 क्यूबियों में विभाजित करता है - लंबाई 3 (कोनों), 2 (किनारों), और 1 (केंद्र) के तार। यह समान 6 केंद्रीय घन के साथ हल किए गए घन के 26 घन भी उत्पन्न करता है। निम्नलिखित सभी मानदंडों को पूरा किया जाना चाहिए:

  • 6 केंद्रों के बीच कोई डुप्लिकेट नहीं है

  • दिए गए / हल किए गए क्यूबियों के सेट, रोटेशन तक - जैसे विचार 'WBR'और 'BRW'एक ही क्यूबी, लेकिन नहीं'BWR'

  • कोने के क्रमपरिवर्तन और किनारे क्रमपरिवर्तन दोनों के समरूप हैं

  • कोने रोटेशन सूचकांक के सापेक्ष -3 राशि (उदाहरण के लिए "सबसे छोटा" पत्र लेने के Bलिए एक संदर्भ बिंदु के रूप में हमारे पास: 'BRW'→0, 'WBR'→1, 'RWB'→2) दिया जाता है और हल क्यूब्स के बीच मैच; कोनों modulo 2 के लिए समान

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.