कल्पना कीजिए कि हमारे पास कुछ पॉलीमिनो हैं और वे विशिष्ट रूप से उनकी पहचान करना चाहेंगे, हालांकि पॉलीमिनोस को घुमाया जा सकता है, इसलिए नेत्रहीन हैशिंग उन्हें एक टुकड़े और उसके रोटेशन (सामान्य रूप में) के लिए एक ही फिंगरप्रिंट नहीं देंगे।
उदाहरण के लिए यदि हमारे पास L-tetromino है
x
x
xx
हम यह चाहेंगे कि इनमें से कोई भी एक ही फिंगरप्रिंट हो:
xx
x x xxx
xxx , x or x
नोट: हम केवल विमान पर घुमाव की अनुमति देते हैं (अर्थात, वे एक तरफा पॉलीमिनोस हैं) और इसलिए निम्नलिखित पॉलोमिनो एक अलग होगा:
x
x
xx
चुनौती
इस चुनौती के लिए कार्य एक फिंगरप्रिंटिंग-फंक्शन / प्रोग्राम को कार्यान्वित करना है जो एक बुलियन / लेवी मैट्रिक्स / सूचियों की सूची / स्ट्रिंग / ले जाता है। एक पॉलोमिनो को एन्कोडिंग करता है और एक स्ट्रिंग लौटाता है - एक पॉलीमिनो का फिंगरप्रिंट । सभी संभावित घुमाव (सामान्य 4 में) के लिए फिंगरप्रिंट समान होना चाहिए।
इनपुट आउटपुट
- और (यानी। कोई खाली Polyomino)
- आप गारंटी देते हैं कि जितना संभव हो उतना छोटा है (यानी सभी को और n को फिट करने के लिए ट्रिम किया गया है
- आपको गारंटी है कि इनपुट है
- बस जुड़ा हुआ है
- कोई छेद नहीं है
- आउटपुट एक स्ट्रिंग होना चाहिए जो पॉलीओमिनो के प्रत्येक संभावित रोटेशन के लिए समान है
उदाहरण
यहां कुछ समतुल्यता वर्ग हैं, प्रत्येक वर्ग के लिए फिंगरप्रिंट एक ही होना चाहिए और दो अलग-अलग वर्गों से किसी भी दो पॉलीमिनोस के लिए उन्हें अलग होना चाहिए।
उदाहरण के L-tetromino के घूर्णन:
[[1,0],[1,0],[1,1]]
[[0,0,1],[1,1,1]]
[[1,1],[0,1],[0,1]]
[[1,1,1],[1,0,0]]
जे-टेट्रोमिनो:
[[0,1],[0,1],[1,1]]
[[1,1,1],[0,0,1]]
[[1,1],[1,0],[1,0]]
[[1,0,0],[1,1,1]]
यूनिट पॉलोमिनो
[[1]]
एक बार:
[[1,1,1,1,1]]
[[1],[1],[1],[1],[1]]
एक कोने:
[[1,1],[1,0]]
[[1,0],[1,1]]
[[0,1],[1,1]]
[[1,1],[0,1]]
डब्ल्यू pentomino:
[[1,0,0],[1,1,0],[0,1,1]]
[[0,0,1],[0,1,1],[1,1,0]]
[[1,1,0],[0,1,1],[0,0,1]]
[[0,1,1],[1,1,0],[1,0,0]]
""
(खाली स्ट्रिंग) आउटपुट करता हूं, तो क्या मैंने सभी आवश्यकताओं को पूरा किया है?