Caesar Cipher
문제
caesar 암호화 방법은 아래와 같다.
숫자 3이 주어 진다면 먼저 아래와 같이 알파벳의 순서를 3칸 rotation 시킨 알파벳 배열을 준비하고
Original alphabet: abcdefghijklmnopqrstuvwxyz
Alphabet rotated +3: defghijklmnopqrstuvwxyzabc
평문 문자열에 대하여 각 문자들을 위의 새로운 알파벳 순서 배열의 해당 위치 문자로 변환시킨다.
예) “hello WORLD!”
"hello WORLD!" => "khoor ZRUOG!"
rotation 크기가 k로 주어질 때, 임의 문자열을 암호화하는 caesar 암호화 함수를 완성하라.
js코드
function caesarCipher(s, k) {
function enc(k) {
var lower = "abcdefghijklmnopqrstuvwxyz"
var upper = lower.toUpperCase()
var encLower = lower.slice(k % 26) + lower.slice(0, k % 26)
var encUpper = upper.slice(k % 26) + upper.slice(0, k % 26)
return function encK(c) {
if (lower.includes(c)) {
return encLower[lower.indexOf(c)]
} else if (upper.includes(c)) {
return encUpper[upper.indexOf(c)]
} else {
return c
}
}
}
var encK = enc(k)
return s
.split("")
.map(c => encK(c))
.join("")
}
caesarCipher("hello world!", 3)
코드 리뷰
- 문자열의 일부를 잘라낼 때
slice
함수를 적절히 활용 - 굳이 그럴 필요는 없었지만
encK
함수를 만들기 위해enc
고차함수를 활용
Ref.
https://www.hackerrank.com/challenges/caesar-cipher-1/problem