पर विचार करें यदि आप एक है हैश फंक्शन जो लंबाई के तार लेता है और रिटर्न लंबाई के तार और अच्छा गुण है कि यह है टक्कर प्रतिरोधी , यानी इसे खोजने के लिए कठिन है दो अलग अलग तार एक ही हैश के साथ ।
अब आप एक नया हैश फंक्शन बनाना चाहेंगें जो के तार लेता है मनमाने ढंग से लंबाई और उन्हें लंबाई के तार करने के लिए नक्शे , जबकि अभी भी टक्कर प्रतिरोधी जा रहा है।
आपके लिए भाग्यशाली, पहले से ही 1979 में अब एक विधि जिसे मर्कले-डैमगार्ड निर्माण के रूप में जाना जाता है, प्रकाशित हुई थी जो वास्तव में इसे प्राप्त करती है।
इस चुनौती का कार्य इस एल्गोरिथ्म को लागू करना होगा, इसलिए हम पहले चरण-दर-चरण उदाहरण के माध्यम से जाने से पहले, मर्कले-दामगार्ड निर्माण के एक औपचारिक विवरण पर एक नज़र डालेंगे, जो यह दिखाना चाहिए कि दृष्टिकोण की तुलना में सरल है यह पहली बार में दिखाई दे सकता है।
यह देखते हुए कुछ पूर्णांक , एक हैश समारोह ऊपर वर्णित और एक इनपुट स्ट्रिंग के रूप में मनमाना लंबाई की, नए हैश फंक्शन निम्नलिखित है:
- सेट , की लंबाई , और विभाजन लंबाई की मात्रा में , के साथ पिछले हिस्सा भरने अनुगामी यदि आवश्यक हो तो शून्य। यह पैदावार कईचूजेजिन्हेंलेबल किया जाता है।
- एक अग्रणी और पीछे हिस्सा जोड़े और , जहां से मिलकर एक स्ट्रिंग है शून्य और है बाइनरी में, साथ गद्देदार प्रमुख लंबाई करने के लिए शून्य ।
- अब iteratively को वर्तमान chunk लागू करते हैं, जो पिछले परिणाम : जुड़ा है , जहाँ । (यह कदम नीचे दिए गए उदाहरण को देखने के बाद अधिक स्पष्ट हो सकता है।)
- का आउटपुट अंतिम परिणाम ।
काम
एक प्रोग्राम या फ़ंक्शन लिखें जो इनपुट के रूप में पॉजिटिव पूर्णांक , एक हैश फ़ंक्शन को ब्लैक बॉक्स और एक गैर-रिक्त स्ट्रिंग रूप में है और उसी इनपुट पर H ′ के समान परिणाम देता है।
यह कोड-गोल्फ है , इसलिए प्रत्येक भाषा में सबसे कम उत्तर जीतता है।
उदाहरण
मान लें कि , इसलिए हमारा दिया गया हैश फंक्शन लंबाई 10 का तार लेता है और लंबाई 5 का तार देता है।
- पज़ल्स" के इनपुट को देखते हुए , हमें निम्नलिखित चंक्स मिलते हैं : , , और । ध्यान दें कि को एक अनुगामी शून्य के साथ लंबाई 5 तक गद्देदार करने की आवश्यकता है।
- सिर्फ पांच शून्य के एक स्ट्रिंग और है है पाँच बाइनरी में ( ) , दो प्रमुख शून्य के साथ गद्देदार है।
- अब मात्रा के साथ संयुक्त कर रहे हैं :
- हमारा आउटपुट है।
चलो इस उत्पादन कुछ विकल्प के आधार पर इस तरह दिखाई देंगे एक नजर है 1 के लिए :
- यदि , यानी बस हर दूसरे चरित्र देता है, हम पाते हैं:
So needs to be the output if such a is given as black box function. - If simply returns the first 5 chars of its input, the output of is . Similarly if returns the last 5 chars, the output is .
- यदि अपने इनपुट के वर्ण कोड को गुणा करता है और इस संख्या के पहले पाँच अंक लौटाता है, जैसे , तो ।
1 सादगी के लिए, उन वास्तव में टकराव प्रतिरोधी नहीं हैं, हालांकि यह आपके प्रस्तुत करने के परीक्षण के लिए कोई फर्क नहीं पड़ता।
omgPzzles0
. Well chosen example input!