자극
에서 이 문제 귀하의 작업이 자연스럽게 캐릭터의 제곱근을 할 수있는 방법을 소개하고, 두 개의 문자열을 곱했다.
어떻게 작동합니까?
문자열 (예 :)이 주어지면 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
(인쇄 가능한 범위) 이어야합니다 . 오타입니다. 죄송합니다.