다음은 빈도별로 영어 알파벳 문자입니다.
e t a o i n s h r d l c u m w f g y p b v k j x q z
즉, e
가장 자주 사용되는 문자이며 가장 z
일반적이지 않습니다. ( Wikipedia의 데이터 )
당신의 도전은 다음과 같은 ROT-n'd 텍스트를 취하는 것입니다.
ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
이 텍스트는 ROT-21 (42 분의 2)을 통해 "암호화되는" "안전하고 안전한이 보안 비밀 메시지"입니다. 위의 빈도 표를 사용하는 프로그램은 각 문자가 얼마나 회전했는지와 원본 텍스트로 결정할 수 있어야합니다.
(ROT-n에 익숙하지 않은 경우 기본적으로 각 문자를로 이동 n
합니다 (예 : ROT-2, a -> c, b -> d, ..., x -> z, y -> a, z -> b
)).
어떻게 물어? 사용해야하는 (매우 순진한) 알고리즘은 다음과 같습니다.
- 각각
n
의0
에25
포함, ROT-을 적용-n
입력 문자열. ( 암호화n
를 취소 하고 싶기 때문에 음수 입니다. ROT--n
는 ROT- 와 동일합니다26-n
. - 문자의 상대적 빈도를 더하여 각 입력 문자열을 숫자로 변환하십시오.
e
이고0
,t
이며1
,a
이다2
예 등, 문자열에 해당하는 번호"hello"
7 + 0 + 10 + 10 + 3 = 30이다. - 해당 숫자가 가장 낮은 문자열을 찾으십시오.
- 해당 문자열과 해당을 출력하십시오
n
.
규칙 :
- 입력은 합리적인 위치 (STDIN, 함수 인수, 파일 등) 일 수 있으므로 출력 할 수 있습니다 (STDOUT, 함수 반환 값, 파일 등).
- 항상 동일한 결과를 생성하는 한 다른 알고리즘을 사용할 수 있습니다. 예를 들어,
z
0과e
25 사이에 있고 가장 높은 숫자를 선택해도됩니다. - 두 문자열의 점수가 동일하면 그 중 하나 (또는 둘 다)를 출력하도록 선택할 수 있습니다. 이것은 중요한 경우이며이를 설명 할 필요는 없습니다.
- 이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이길 것입니다!
테스트 사례 :
입력 : ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
출력 :21 thisisaverysecretmessagethatisverysecureandsafe
입력 : pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom
출력 :8 hellopeopleofprogrammingpuzzlescodegolfstackexchange
입력 : ftueimeqzodkbfqpiuftdaffiqxhqeaufygefnqbqdrqofxkemrq
출력 :12 thiswasencryptedwithrottwelvesoitmustbeperfectlysafe
입력 : jgtgkuvjghkpcnvguvecugvjcvaqwowuvfgetarv
출력 :2 hereisthefinaltestcasethatyoumustdecrypt
wtaad
주어야한다0 wtaad
결과로, 그리고vszzc
주어야25 wtaad
결과로.