مسیرها
/
Standard ML
Standard ML
/
تمرین‌ها
/
مربع رمزنگاری
مربع رمزنگاری

مربع رمزنگاری

متوسط

دستورالعمل‌ها

روش کلاسیک ساختن پیام‌های رمزی موسوم به رمز مربعی را پیاده‌سازی کنید.

با گرفتن یک متن انگلیسی، نسخه‌ی رمزگذاری‌شده‌ی آن متن را خروجی بدهید.

ابتدا ورودی نرمال‌سازی می‌شود: فاصله‌ها و نشانه‌های نگارشی از متن انگلیسی حذف می‌شوند و پیام به حروف کوچک تبدیل می‌شود.

سپس نویسه‌های نرمال‌شده به سطرهایی تقسیم می‌شوند. اگر این سطرها با خطوط جدید میانشان چاپ شوند، می‌توان آن‌ها را به‌صورت یک مستطیل در نظر گرفت.

برای مثال، جمله‌ی

"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) را پر کنند، به‌صورت c تکه با طول r که با فاصله از هم جدا شده‌اند. برای عبارت‌هایی که n نویسه از مستطیل کامل کمتر دارند، به هر یک از n تکه‌ی آخر یک فاصله‌ی انتهایی اضافه کنید.

"imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn  sseoau "

توجه کنید که اگر این‌ها را روی هم بچینیم، می‌توانیم متن رمزگذاری‌شده را به‌صورت بصری به پیام اصلی بازگردانیم:

"imtgdvs"
"fearwer"
"mayoogo"
"anouuio"
"ntnnlvt"
"wttddes"
"aohghn "
"sseoau "
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Standard ML Exercism

آماده‌اید مربع رمزنگاری را شروع کنید؟

در Exercism ثبت‌نام کنید تا Standard ML را همراه با 90 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.