자바 스크립트 (ES6), 101 99 바이트
카레 구문으로 입력을 (s)(n)
받습니다. 문자 배열과 함께 작동합니다.
s=>n=>s.map(c=>(S='1QAZ2WSX3EDC4RFV5TGB6YHN7UJM8IK_9OL_0P')[(p=S.search(c)+n*4)%(-~'9986'[p%4]*4)])
테스트 사례
let f =
s=>n=>s.map(c=>(S='1QAZ2WSX3EDC4RFV5TGB6YHN7UJM8IK_9OL_0P')[(p=S.search(c)+n*4)%(-~'9986'[p%4]*4)])
console.log(JSON.stringify(f([..."0PLM"])(1))) // 1QAZ
console.log(JSON.stringify(f([..."ZXCVB"])(2))) // CVBNM
console.log(JSON.stringify(f([..."HELLO"])(3))) // LYDDW
console.log(JSON.stringify(f([..."0PLM"])(11))) // 1QSV
console.log(JSON.stringify(f([..."0PLM"])(2130))) // 0PHX
방법?
키보드 행이 인터리브 되는 문자열 S 내에서 입력의 각 문자의 위치 p 를 찾습니다 . 처음 4자는 '1QAZ' (키보드의 첫 번째 열)이고 다음 4자는 '2WSX' (두 번째 열)입니다. 키보드 등). 사용하지 않은 위치는 밑줄로 채워지고 마지막 위치는 단순히 버려집니다.
col # | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
------+------+------+------+------+------+------+------+------+------+---
row # | 0123 | 0123 | 0123 | 0123 | 0123 | 0123 | 0123 | 0123 | 0123 | 01
------+------+------+------+------+------+------+------+------+------+---
char. | 1QAZ | 2WSX | 3EDC | 4RFV | 5TGB | 6YHN | 7UJM | 8IK_ | 9OL_ | 0P
이를 통해 p mod 4로 행을 쉽게 식별 할 수 있으며 행 사이에 명시적인 구분 기호가 필요하지 않습니다.
우리는 4n 위치로 전진하고 ,이 행에 올바른 모듈로를 적용하고 (각각 40, 40, 36 및 28) S 에서이 새로운 위치에서 찾은 대체 문자를 선택합니다 .