мотивация
В этой задаче ваша задача состояла в том, чтобы умножить две строки, это естественным образом представляет способ получения квадратного корня строки.
Как это работает?
Для заданной строки (например 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(это диапазон для печати), это опечатка - извините за это.