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
Comments