المسارات
/
Python
Python
/
التمارين
/
المربع المشفّر
المربع المشفّر

المربع المشفّر

سهل

التعليمات

نفّذ الطريقة الكلاسيكية لتكوين رسائل سرية تُعرف بالكود المربّع.

عند إعطائك نصًا بالإنجليزية، أخرج النسخة المرمّزة من ذلك النص.

أولًا، يُطبَّع المدخل: تُزال المسافات وعلامات الترقيم من النص الإنجليزي، وتُحوَّل الرسالة إلى أحرف صغيرة.

ثم تُقسَّم الأحرف المُطبَّعة إلى صفوف. ويمكن النظر إلى هذه الصفوف على أنها تشكّل مستطيلًا عند طباعتها مع أسطر جديدة فاصلة بينها.

على سبيل المثال، الجملة

"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.

طول نصنا المُطبَّع 54 حرفًا، وهذا يفرض مستطيلًا بأبعاد 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 يفتح الرابط في نافذة أو علامة تبويب جديدة
Python Exercism

مستعد لبدء المربع المشفّر؟

سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.