мотивация
В этой задаче ваша задача состояла в том, чтобы умножить две строки, это естественным образом представляет способ получения квадратного корня строки.
Как это работает?
Для заданной строки (например 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
(это диапазон для печати), это опечатка - извините за это.Ответы:
sh + coreutils, 58 байт
Попробуйте онлайн!
Модульный квадратный корень обычно не уникален; у нас есть 2 или 4 варианта для каждого персонажа, кроме
. Нам не нужно переводить
,
!
,4
,l
так как каждый из них уже квадратный корень из себя. Для оставшихся символов мы выбираем изображения, которые не нужно экранировать для оболочки илиtr
.источник
Python 3,
5756 байтtranslate
использует отображение из «Порядковых Unicode в Порядковые Unicode». Таким образом, нам не нужныchr
/ord
преобразования. Примечание: он не падает, когда у символа нет рута.Сохранено 1 байт благодаря @ jonathan-allan
Значение сопоставления является наибольшим корнем в диапазоне 0,94 ключа. Чтобы иметь наименьший root (как в примерах), используйте:
(61 байт)
источник
32
иfor
.Python 2 , 80 байт
Попробуйте онлайн!
Выдает IndexError, если корня не существует.
источник
Japt ,
1615 байтПопробуйте онлайн!
Сохраните байт, посмотрев на ответ 05AB1E (используя
L
= 100 вместо95
). Теперь Japt самый короткий, довольно редкий случай :-Dобъяснение
источник
Mathematica, 94 байта
Попробуйте онлайн!
источник
Желе ,
181716 байтПопробуйте онлайн! (поставляется с нижним колонтитулом test-suite)
Сохранено 2 байта путем полной перезаписи.
Также в первый раз я нашел применение для}
.объяснение
Код сначала вычисляет все квадратные символы, а затем отображает их в соответствующие квадратные корни.
источник
95Ḷ²%95+32iЀO+31Ọ
это в основном то, что делает мой ответ Япта, хотя ваше решение на два байта короче ...JavaScript, 82 байта
Сотрудничал с @ETHproductions
Ввод и вывод в виде массива символов.
Тестовый фрагмент
Показать фрагмент кода
источник
05AB1E , 17 байт
Алгоритм очень похож на ответ Jelly и Japt (раньше было что-то еще, но это дало мне только 19 байтов)
объяснение
Попробуйте онлайн!
источник
Mathematica, 60 байт
Анонимная функция. Принимает строку в качестве ввода и возвращает строку в качестве вывода. Ошибки при неверном вводе.
источник
Perl 6 , 53 байта
Попробуйте онлайн!
источник
Mathematica 82 байта
Используя способность Solve выполнять модульную арифметику.
источник