এনিগমা মেশিন হ'ল একটি জটিল জটিল সাইফার মেশিন যা জার্মানরা এবং অন্যরা তাদের বার্তাগুলি এনক্রিপ্ট করতে ব্যবহার করে। এই মেশিনটি * প্রয়োগ করা আপনার কাজ।
পদক্ষেপ 1, আবর্তন
আমাদের এনিগমা মেশিনে রোটারগুলির জন্য 3 টি স্লট এবং এই স্লটের প্রতিটিটির জন্য 5 টি রোটার রয়েছে। প্রতিটি রটার 26 বিভিন্ন সম্ভব অবস্থানের (থেকে গেছে A
করার Z
)। প্রতিটি রটারের একটি পূর্বনির্ধারিত খাঁজ অবস্থান থাকে :
Rotor Notch
------------
1 Q
2 E
3 V
4 J
5 Z
কীপ্রেসে নিম্নলিখিত পদক্ষেপগুলি ঘটে:
- স্লট 1 এ রটার ঘোরানো
- স্লট 1-র রটার যদি তার খাঁজ পেরিয়ে যায়, তবে এটি স্লট 2 এ রটারটি ঘোরাবে।
- স্লট 2-এ রটার যদি তার খাঁজতে থাকে (তবে কেবল সেখানে সরেনি), রটার 2 এবং 3 উভয়ই একবার ঘোরান।
আমরা rotors 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 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 শুরু রটার পজিশনের একটি তালিকা (চিঠি হিসাবে)
- একটি স্ট্রিং যা এনক্রিপ্ট করা দরকার।
আপনি ধরে নিতে পারেন যে আপনার ইনপুটটি ভালভাবে গঠিত হবে এবং সমস্ত অক্ষর বড় হাতের অক্ষর হবে, কোনও স্থান নেই।
আপনাকে অবশ্যই এনক্রিপ্ট করা স্ট্রিংটি ফিরিয়ে দিতে হবে।
আপনি ইনপুট হিসাবে orsচ্ছিকভাবে রোটার, খাঁজ এবং প্রতিবিম্বকে গ্রহণ করতে পারেন। যাঁরা তাদের স্কোর থেকে 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
আমার বাস্তবায়ন পাওয়া যাবে গিথুব-এ । আমি এটি পরীক্ষা করেছি, তবে আমার বাস্তবায়নে আমার বাগ থাকতে পারে (যার অর্থ আমার পরীক্ষার কেসগুলি সম্ভবত ভুল)।
* আমি এটি যথাসম্ভব যথাযথ করার চেষ্টা করেছি , তবে মেশিনের মধ্যে পার্থক্যের কারণে আমার কিছু বিবরণ ভুল হতে পারে। তবে আপনার কাজটি হ'ল আমি যা বর্ণনা করেছি তা বাস্তবায়ন করা, এমনকি আমি ভুল না হলেও। সরলতার জন্য আমি প্লাগবোর্ডটি অন্তর্ভুক্ত করছি না