前端刷华为机考20-23题

207 阅读2分钟

HJ21 简单密码

注意'Z'后面是'a'

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(line = await readline()){
        const infos = {
            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,
        };

        let result = "";

        [...line].forEach(char=>{
            const num = char.charCodeAt();

            if(num > 96){
                result += infos[char];

            }
            else if(num > 64){

               result += char == 'Z' ? 'a' : String.fromCharCode(char.toLowerCase().charCodeAt()+1);
            }
            else{
                result += char
            }
        })

        console.log(result);
    }
}()

HJ22 汽水瓶

只有手中有两个空瓶的时候才需要向老板借,借了也能换。

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line', function (line) {

    if(line != 0){
        let count = +line,result = 0;

        while(count > 2){

            const num = count /3 | 0;
            result += num;
            count -= num*2;
            if(count == 2){
                count++;
            }

        }

        console.log(result);

    }
});

HJ23 删除字符串中出现次数最少的字符

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    while(line = await readline()){
        let infos = {};
        [...line].forEach(char=>{
            if(infos[char]){
                infos[char]++
            }
            else{
                infos[char] = 1;
            }
        })

        const min = Math.min(...Object.values(infos));

        let str =line;
        Object.keys(infos).forEach(char=> infos[char] == min && (str = str.replace(new RegExp(char,'g'),"")));

        console.log(str);
    }
}()

离职在家的 195 天,碰到一个在线测试和简历一起看的,题目一般,主要是选择题和两个简述题,用不了多少时间,倒是有几个有趣的。

arguments 实现了 Symbol.iterator 可以被 for...of操作。

[] == 0true []会调用valueOf方法

[] + [] == 0true, []调用了toString方法为"''"

{} + [] == 0true, 但是 [] + {} == 0却是false 因为 {}toString[object Object],因为前者

在 js 中{}代表复合语句,在一些 js 解释器会将开头的  {}  看作一个代码块,而不是一个 Object(在 es6 以前只有函数作用域与全局作用域,还没有块级作用域)而这里的{}只是空符号,不表明任何意思。这里的+[]是一个隐式转换,所以参与运算的只有+[],在这里将[]转换成了 number 类型,所以得出结果为 0。

{};
 +[] //[].toString() == "";   +" " == 0

原文地址: www.jianshu.com/p/b520dbb23…

有些东西吧应该弃之如糟粕,项目上也没必要这样用,当个乐子还行。