Мотивація
У цьому завданні вашим завданням було помножити два рядки, це природно вводить спосіб взяти квадратний корінь рядка.
Як це працює?
З огляду на рядок (наприклад pub
), перше, що вам потрібно зробити, - це визначити код ASCII для кожного символу:
"pub" -> [112, 117, 98]
Далі ви зіставляєте ці коди в діапазон [0..94]
, віднімаючи 32
кожне значення:
[112, 117, 98] -> [80, 85, 66]
Тепер потрібно знайти для кожного значення його кореневу модуль 95
(наприклад 40*40 % 95 = 80
, ви також можете вибрати 55
):
[80, 85, 66] -> [40, 35, 16]
І, нарешті, ви повернете його до діапазону [32..126]
і перетворите його в рядок:
[40, 35, 16] -> [72, 67, 48] -> "HC0"
Дійсно, "HC0" ⊗ "HC0" = "pub"
як ви можете підтвердити рішення з іншого виклику тут .
Знайомі з модульною арифметикою, ймовірно, помітили, що модуль квадратного кореня 95
існує не завжди, наприклад, для нього немає кореня 2
. У такому випадку квадратний корінь рядка не визначений, і ваша програма / функція може вийти з ладу, циклічити нескінченно тощо.
Для вашої зручності ось список символів, що мають квадратний корінь (перша - пробіл):
!$%&)+03489:>CDGLMQVW]`bjlpqu
Правила
- Ви напишете програму / функцію, яка бере аргумент (або список знаків) і повертає будь-який квадратний корінь, якщо він існує
- Ви можете припустити, що вхід завжди має квадратний корінь
- Вхід може складатися з порожнього рядка
- Вхід буде в діапазоні для друку (
[32..126]
) - Вихід або надрукується на консолі, або ви повернете рядок, якщо квадратний корінь існує
- Якщо квадратного кореня не існує, поведінка вашої програми / функції залишається невизначеною
- Якщо ви вирішили надрукувати корінь на консолі, то виходять нові рядки чи пробіли
Тестові справи
Зауважте, що це не обов'язково єдині рішення:
'' -> ''
'pub' -> 'HC0'
'pull!' -> 'HC33!'
'M>>M' -> '>MM>'
'49' -> '4%'
'64' -> undefined
'Hello, World!' -> undefined
0-94
(це діапазон для друку), це друкарська помилка - вибачте за це.