개발자 톡
연습문제 톡
[HSAT 3회 정기 코딩 인증평가 기출] 플레이페어 암호
JS
- 등록일
- 2024-11-12 18:01:15
- 조회수
- 31
- 작성자
- vavoya6324
// 입력처리 const fs = require('fs') const input = fs.readFileSync('input.txt', 'utf8') .trim() .split(/\n+/) // 상자 let cipherBox = {} const plainText= input[0].split('') const keyText = input[1].split('') let startNum; startNum = 'A'.charCodeAt(0) let num = 0 keyText.forEach(char => { if (!(char in cipherBox)) { cipherBox[char] = num++ } }) for (let i = 'A'.charCodeAt(0); i <= 'Z'.charCodeAt(0); i++) { const char = String.fromCharCode(i) if (!(char in cipherBox) && char !== 'J') { cipherBox[char] = num++ } } const cipherBoxNum = Object.keys(cipherBox) let i = 0 const result = [] while (plainText[i]) { const char1 = plainText[i] let char2 = plainText[i + 1] // 서로 같은지 검사 if (char1 === char2) { // XX => XQ X if (char1 === 'X') { char2 = 'Q' } // 그 외 AA => AX A else { char2 = 'X' } i += 1 } // 문자 쌍이 안되면 else { if (char2 === undefined) { char2 = 'X' } i += 2 } // 이제 암호화 진행 let index1 = cipherBox[char1] let index2 = cipherBox[char2] //console.log(char1, char2) //console.log(index1, index2) //console.log('------') // 같은 행 if (Math.floor(index1 / 5) === Math.floor(index2 / 5)) { if (index1 % 5 === 4) { index1 -= 4 } else { index1++ } if (index2 % 5 === 4) { index2 -= 4 } else { index2++ } } // 같은 열 else if ((index1 % 5) === (index2 % 5)) { if (index1 + 5 > 24) { index1 -= 20 } else { index1 += 5 } if (index2 + 5 > 24) { index2 -= 20 } else { index2 += 5 } } // 그 외 else { let gap = (index1 % 5) - (index2 % 5) index1 -= gap index2 += gap } //console.log(cipherBoxNum[index1], cipherBoxNum[index2]) //console.log(index1, index2) //console.log('=======') result.push(cipherBoxNum[index1], cipherBoxNum[index2]) } console.log(result.join(''))
#[HSAT_3회_정기_코딩_인증평가_기출]_플레이페어_암호
#js