Треки
/
Ruby
Ruby
/
Вправи
/
Криптографічний квадрат
Криптографічний квадрат

Криптографічний квадрат

Легка

Вказівки

Реалізуйте класичний метод укладання таємних повідомлень під назвою «квадратний код».

Маючи англійський текст, виведіть закодовану версію цього тексту.

Спершу вхідні дані нормалізують: з англійського тексту прибирають пробіли й розділові знаки, а повідомлення переводять у нижній регістр.

Потім нормалізовані символи розбивають на рядки. Ці рядки можна вважати такими, що утворюють прямокутник, якщо надрукувати їх із символами нового рядка між ними.

Наприклад, речення

"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 Посилання відкривається в новому вікні або вкладці
Ruby Exercism

Час розпочати Криптографічний квадрат?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Ruby, а також 21 концепція121 вправа та справжнє наставництво від людей, і все це безкоштовно.