एक टॉप-फ्रंट-साइड पहेली एक पहेली है, जहाँ आपको तीन-ऑर्थोगोनल व्यू दिए गए (आमतौर पर क्यूबिक) ब्लॉक के 3-डी आकार के निर्माण की आवश्यकता होती है: एक टॉप व्यू, एक फ्रंट व्यू और एक साइड व्यू।
उदाहरण के लिए, एक शीर्ष, सामने और साइड व्यू इस प्रकार दिया गया है:
Top: Front: Side:
. . . . . . . . . . . .
. x x . . x x . . x x .
. x x . . x x . . x x .
. . . . . . . . . . . .
In this problem, the side view is taken from the right.
एक 2x2x2 क्यूब (वॉल्यूम 8 के साथ) इस समाधान को पूरा करेगा, लेकिन यह वॉल्यूम 4 में उल्लेखनीय है, अगर हमारे पास निम्न परत है:
. . . . . . . .
. x . . . . x .
. . x . . x . .
. . . . . . . .
कुछ नायाब व्यवस्थाएं भी हैं। उदाहरण के लिए:
Top: Front: Side:
. . . . . . . . . . . .
. . . . . . x . . . . .
. x . . . . . . . x . .
. . . . . . . . . . . .
यदि शीर्ष दृश्य कहता है कि ब्लॉक बाईं ओर से दूसरा है, तो ऐसा कोई तरीका नहीं है जो सामने के दृश्य से मेल खा सके जो कहता है कि ब्लॉक बाईं ओर से तीसरा होना चाहिए। इसलिए यह व्यवस्था असंभव है।
आपका कार्य एक ऐसा प्रोग्राम बनाना है, जो मनमाने ढंग से 4x4 टॉप-फ्रंट-साइड की पहेली को देखते हुए, इसे कम से कम क्यूब्स में हल करने का प्रयास करता है, या इसे अयोग्य घोषित करता है।
आपका कार्यक्रम इनपुट के रूप में 48 बिट्स की एक श्रृंखला के रूप में ले जाएगा, शीर्ष, सामने और साइड व्यू का प्रतिनिधित्व करेगा। वे किसी भी प्रारूप में हो सकते हैं जो आप चाहते हैं (6-बाइट स्ट्रिंग, 0 की स्ट्रिंग और 1 का, 12-अंकीय हेक्स संख्या, आदि), लेकिन बिट्स का क्रम इस तरह से मैप करना चाहिए:
Top: 0x00 Front: 0x10 Side: 0x20
0 1 2 3 0 1 2 3 0 1 2 3
4 5 6 7 4 5 6 7 4 5 6 7
8 9 a b 8 9 a b 8 9 a b
c d e f c d e f c d e f
दूसरे शब्दों में, बिट्स बाएं से दाएं, ऊपर से नीचे के क्रम में, ऊपर, फिर सामने, फिर साइड व्यू में जाते हैं।
आपका प्रोग्राम तब 4x4x4 ग्रिड में क्यूब्स को इंगित करते हुए 64 बिट्स की एक श्रृंखला का उत्पादन करेगा, जो कि भरे हुए हैं या इंगित करते हैं कि ग्रिड बेकार है।
आपके प्रोग्राम को 1,000,000 परीक्षण मामलों की बैटरी चलाकर चलाया जाएगा।
परीक्षण डेटा को "999999" के माध्यम से पूर्णांक "000000" के एमडी 5 हैश को स्ट्रिंग्स के रूप में उत्पन्न किया जाएगा, इनमें से प्रत्येक हैश के पहले 48 बिट्स (12 हेक्सिट) को निकाला जाएगा, और शीर्ष-सामने के इनपुट के रूप में उनका उपयोग किया जाएगा। पक्ष पहेली। एक उदाहरण के रूप में, यहां कुछ परीक्षण इनपुट और उनके द्वारा बनाई गई पहेलियाँ हैं:
Puzzle seed: 000000 hash: 670b14728ad9
Top: Front: Side:
. x x . . . . x x . . .
x x x x . x . x x . x .
. . . . . x x x x x . x
x . x x . . x . x . . x
Puzzle seed: 000001 hash: 04fc711301f3
Top: Front: Side:
. . . . . x x x . . . .
. x . . . . . x . . . x
x x x x . . . x x x x x
x x . . . . x x . . x x
Puzzle seed: 000157 hash: fe88e8f9b499
Top: Front: Side:
x x x x x x x . x . x x
x x x . x . . . . x . .
x . . . x x x x x . . x
x . . . x . . x x . . x
पहले दो असाध्य हैं, जबकि अंतिम में निम्नलिखित परतों के साथ एक समाधान है, आगे पीछे:
x . . . . . . . x x x . x x x .
. . . . x . . . . . . . . . . .
x . . . . . . . . . . . x x x x
x . . . . . . . . . . . x . . x
There are a total of 16 blocks here, but it can probably be done in less.
प्राथमिकता के अवरोही क्रम में आपके कार्यक्रम का स्कोर निम्नलिखित मानदंडों द्वारा निर्धारित किया जाएगा:
- हल किए गए मामलों की उच्चतम संख्या।
- उन मामलों को हल करने के लिए आवश्यक ब्लॉक की सबसे कम संख्या।
- बाइट्स में सबसे छोटा कोड।
आपको अपने द्वारा स्कोर जमा करना होगा और गणना करनी होगी, जिसके लिए आपके प्रोग्राम को सभी 1,000,000 परीक्षण मामलों के माध्यम से चलाने में सक्षम होना चाहिए।