JavaScript题解 | #简单密码#
简单密码
https://www.nowcoder.com/practice/7960b5038a2142a18e27e4c733855dac
/** * 1. 数字和其它符号不变 [^(a-z|A-z)] * 2. [a-z] => 变成对应的数字 map * 3、[A-Z] => 变成小写并往后移一位 ascill */ const rl = require('readline').createInterface({ input: process.stdin, output: process.stdout }); rl.on('line', (line) => { const pwd = line.trim(); const res = translator(pwd); console.log(res); }); function translator(pwd) { let res = ''; const aCharCode = 'a'.charCodeAt(); const upperToLower = 'A'.charCodeAt() - aCharCode; for(let i = 0, len = pwd.length; i < len; i++) { const current = pwd[i]; const lowerMap = { a: 2, b: 2, c: 2, d: 3, e: 3, f: 3, g: 4, h: 4, i: 4, j: 5, k: 5, l: 5, m: 6, n: 6, o: 6, p: 7, q: 7, r: 7, s: 7, t: 8, u: 8, v: 8, w: 9, x: 9, y: 9, z: 9 } if(/[a-z]/.test(current)) { res += lowerMap[current]; } else if(/[A-Z]/.test(current)) { let n; if(current === 'Z') { n = 'a'.charCodeAt(); } else { n = current.charCodeAt() + 1 - upperToLower; } res += String.fromCharCode(n); } else { res += current; } } return res; }
难度:⭐⭐
难点:
1、 大写字母转小写字母
大写字母加+1之后 + (大写字母与小写字母之间的间隔)= 对应小写字母的数字
2、 小写字母的查找对应的按键数字
3、给两颗星是要注意小写字母并不总是3个对应一个数字,大写字母Z往后+1并不是对应小写字母a,第三点注意到了就没问题了。
知识点:
1、JavaScript 字符对应的ASCII code 转换
'a'.charCodeAt()
2、数字转ASCII码
String.fromCharCode(num);
一上来不仔细看题,不想写字母对应数字的map,想着用什么公式对等转换一下,频频出错,实在不应该啊。自己不熟悉9键也有一定的关系。