एनिग्मा मशीन एक काफी जटिल सिफर मशीन है जिसका इस्तेमाल जर्मन और अन्य अपने संदेशों को एन्क्रिप्ट करने के लिए करते हैं। इस मशीन को लागू करना आपका काम है *।
चरण 1, रोटेशन
हमारे एनिग्मा मशीन में रोटर्स के लिए 3 स्लॉट हैं, और इनमें से प्रत्येक स्लॉट के लिए 5 उपलब्ध रोटार हैं। प्रत्येक रोटर 26 विभिन्न संभव पदों (से है A
करने के लिए Z
)। प्रत्येक रोटर में एक पूर्वनिर्धारित पायदान स्थिति होती है :
Rotor Notch
------------
1 Q
2 E
3 V
4 J
5 Z
कीबोर्ड पर निम्नलिखित चरण होते हैं:
- स्लॉट 1 में रोटर घूमता है
- यदि स्लॉट 1 में रोटर अपने पायदान से आगे बढ़ता है, तो यह स्लॉट 2 में रोटर को घुमाता है।
- यदि स्लॉट 2 में रोटर अपने पायदान में है (लेकिन अभी वहां नहीं चला है), रोटर 2 और 3 दोनों एक बार घूमते हैं।
हम रोटार 1,3,5 का उपयोग कर रहे हैं और वे स्थिति में हैं P,U,H
तो पदों की अनुक्रम है: P,U,H
> Q,U,H
> R,V,H
>S,W,I
चरण 2, प्रतिस्थापन
प्रत्येक रोटर एक साधारण चरित्र प्रतिस्थापन करता है। निम्नलिखित A
स्थिति में प्रत्येक रोटर का एक चार्ट है :
ABCDEFGHIJKLMNOPQRSTUVWXYZ
--------------------------
1 EKMFLGDQVZNTOWYHXUSPAIBRCJ
2 AJDKSIRUXBLHWTMCQGZNPYFVOE
3 BDFHJLCPRTXVZNYEIWGAKMUSQO
4 ESOVPZJAYQUIRHXLNFTGKDCMWB
5 VZBRGITYUPSDNHLXAWMJQOFECK
R YRUHQSLDPXNGOKMIEBFZCWVJAT
स्थिति 1 में रोटर 1 है PAIBRCJEKMFLGDQVZNTOWYHXUS
, जो पत्र के C
लिए स्थानापन्न करेगा I
।
तीन रोटार अपने प्रतिस्थापन का प्रदर्शन करने के बाद, परावर्तक हिट ( R
ऊपर के रूप में सूचीबद्ध ) है। यह अपना प्रतिस्थापन करता है, और फिर रोटार के माध्यम से वापस सिग्नल को दर्शाता है। रोटार फिर रिवर्स ऑर्डर में एक रिवर्स प्रतिस्थापन करते हैं।
रिवर्स प्रतिस्थापन का मतलब है कि रोटर 1 के बजाय प्रतिस्थापन के A
साथ E
, यह प्रतिस्थापन E
करता हैA
स्लॉट्स रोटर से भरे हुए हैं 1,2,3 सभी स्थिति में A
। पत्र रोटर्स के माध्यम से Q
पथ का अनुसरण करता है Q>X>V>M
। M
परिलक्षित होता है O
, जो तब के विपरीत मार्ग का अनुसरण करता है O>Z>S>S
। इसलिए, A
के साथ प्रतिस्थापित किया जाता है S
।
इनपुट आउटपुट
आप उत्तीर्ण हैं:
- 3 रोटार की एक सूची (पूर्णांक के रूप में)
- 3 शुरू रोटर पदों की एक सूची (पत्र के रूप में)
- एक स्ट्रिंग जिसे एन्क्रिप्ट करने की आवश्यकता है।
आप मान सकते हैं कि आपका इनपुट अच्छी तरह से बनेगा, और सभी अक्षर अपरकेस अक्षर होंगे, कोई स्पेस नहीं।
आपको एन्क्रिप्टेड स्ट्रिंग को वापस करना होगा।
आप वैकल्पिक रूप से रोटार, नॉच और रिफ्लेक्टर को इनपुट के रूप में स्वीकार कर सकते हैं। उन लोगों के लिए जो अपने स्कोर से 95 बाइट्स नहीं निकाल सकते, जैसे कि95 = ceil(log2(26 letters ^(26*6 rotors +5 notches))/8 bytes)
परीक्षण के मामलों
Rotor Position Input Output
4,1,5 H,P,G AAAAAAAAA RPWKMBZLN
1,2,3 A,A,A PROGRAMMINGPUZZLES RTFKHDOVZSXTRMVPFC
1,2,3 A,A,A RTFKHDOVZSXTRMVPFC PROGRAMMINGPUZZLES
2,5,3 U,L,I GIBDZNJLGXZ UNCRACKABLE
मेरा कार्यान्वयन जीथब पर पाया जा सकता है । मैंने इसका परीक्षण किया है, लेकिन मेरे कार्यान्वयन में कीड़े हो सकते हैं (इसका मतलब यह होगा कि मेरे परीक्षण के मामले गलत हैं)।
* मैंने इसे यथासंभव सटीक बनाने की कोशिश की है , लेकिन मशीनों के बीच भिन्नता के कारण, मेरे पास कुछ विवरण गलत हो सकते हैं। हालाँकि, आपका काम यह है कि मैंने जो भी वर्णन किया है, उसे लागू करें, भले ही मैं गलत हूँ। मैं सादगी के लिए प्लगबोर्ड शामिल नहीं कर रहा हूँ