ট্র্যাক
/
Common Lisp
Common Lisp
/
অনুশীলনী
/
ক্রিপ্টো স্কয়ার
ক্রিপ্টো স্কয়ার

ক্রিপ্টো স্কয়ার

মধ্যম

নির্দেশনা

স্কয়ার কোড নামে পরিচিত গোপন বার্তা রচনার ক্লাসিক পদ্ধতিটি বাস্তবায়ন করুন।

একটি ইংরেজি টেক্সট দেওয়া হলে, সেই টেক্সটের এনকোড করা সংস্করণ আউটপুট দিন।

প্রথমে ইনপুটটি নরমালাইজ করা হয়: ইংরেজি টেক্সট থেকে স্পেস ও যতিচিহ্ন সরিয়ে ফেলা হয় এবং বার্তাটি ছোট হাতের অক্ষরে নামিয়ে আনা হয়।

এরপর নরমালাইজ করা অক্ষরগুলোকে সারিতে ভাগ করা হয়। মাঝে নিউলাইন দিয়ে প্রিন্ট করলে এই সারিগুলোকে একটি আয়তক্ষেত্র তৈরি করতে দেখা যায়।

উদাহরণস্বরূপ, বাক্যটি

"If man was meant to stay on the ground, god would have given us roots."

নরমালাইজ করলে হয়:

"ifmanwasmeanttostayonthegroundgodwouldhavegivenusroots"

প্লেইনটেক্সটকে যতটা সম্ভব বর্গাকার একটি আয়তক্ষেত্রে সাজানো উচিত। আয়তক্ষেত্রের আকার নির্ধারিত হওয়া উচিত বার্তার দৈর্ঘ্য দিয়ে।

যদি c হয় কলামের সংখ্যা আর r হয় সারির সংখ্যা, তাহলে r x c আয়তক্ষেত্রের জন্য এমন ক্ষুদ্রতম সম্ভাব্য পূর্ণসংখ্যা c খুঁজুন যাতে:

  • r * c >= length of message,
  • এবং c >= r,
  • এবং c - r <= 1.

আমাদের নরমালাইজ করা টেক্সটটি ৫৪ অক্ষর দীর্ঘ, যা c = 8 এবং r = 7 বিশিষ্ট একটি আয়তক্ষেত্র নির্ধারণ করে:

"ifmanwas"
"meanttos"
"tayonthe"
"groundgo"
"dwouldha"
"vegivenu"
"sroots  "

কোড করা বার্তাটি পাওয়া যায় বাম থেকে ডানে কলাম ধরে নিচের দিকে পড়ে।

উপরের বার্তাটি কোড করলে হয়:

"imtgdvsfearwermayoogoanouuiontnnlvtwttddesaohghnsseoau"

এনকোড করা টেক্সট এমন অংশে আউটপুট দিন যা নিখুঁত (r X c) আয়তক্ষেত্র পূরণ করে: প্রতিটি অংশের দৈর্ঘ্য r এবং মোট অংশ cটি, স্পেস দিয়ে আলাদা করা। যেসব বাক্যাংশ নিখুঁত আয়তক্ষেত্র থেকে n অক্ষর কম, সেগুলোর ক্ষেত্রে শেষ nটি অংশের প্রতিটির শেষে একটি করে স্পেস বসিয়ে পূরণ করুন।

"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn  sseoau "

লক্ষ্য করুন, এগুলো একটির উপর আরেকটি সাজালে আমরা চোখেই সাইফারটেক্সট ডিকোড করে মূল বার্তায় ফিরে যেতে পারতাম:

"imtgdvs"
"fearwer"
"mayoogo"
"anouuio"
"ntnnlvt"
"wttddes"
"aohghn "
"sseoau "
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Common Lisp Exercism

ক্রিপ্টো স্কয়ার শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Common Lisp ট্র্যাকের 27টি কনসেপ্ট92টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।