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键也有一定的关系。

全部评论

相关推荐

已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务