Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 25x 25x 25x 1300x 1300x 17x 17x 271x 271x 17x | const input = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
const output = 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'.split('')
const lookup = input.reduce<Record<string, string>>((m, k, i) => {
m[k] = output[i]
return m
}, Object.create(null))
/**
* 回转 13 位替换式密码。
*
* @param str 原文
* @see https://zh.wikipedia.org/wiki/ROT13
* @example
* ```typescript
* rot13('hello world') // => 'uryyb jbeyq'
* ```
*/
export function rot13(str: string): string {
let res = ''
for (let i = 0, len = str.length; i < len; i++) {
const char = str.charAt(i)
res += lookup[char] || char
}
return res
}
|