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