猜大小

同步版

process.stdin.setEncoding('utf8');

// This function reads only one line on console synchronously. After pressing `enter` key the console will stop listening for data.
let fn;
function readlineSync() {
    return new Promise((resolve, reject) => {
        if (fn !== (void 0)) {
            process.stdin.removeListener('data', fn)
        }
        fn = function (data) {
            process.stdin.pause(); // stops after one line reads
            resolve(data);
        }
        process.stdin.resume();
        process.stdin.on('data', fn);
    });
}


let array = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]
let passed = new Set;

// entry point
async function main() {
    while (true) {
        let input = await readlineSync();
        input = input.replace("\r\n", "");
        if (array.indexOf(input) !== -1) {
            console.log("入牌:" + input)
            processPassed(input)
            continue;
        }
        if (input === "R") {
            console.log("重新开始")
            passed.clear();
            continue;
        }
        if (input === "exit") {
            console.log("退出")
            break;
        }
        console.log("请输入 2 到 A,R 重新开始")
    }
}

main();


function processPassed(input) {
    if (passed.has(input)) {
        console.log("请重新选择");
        return;
    }
    passed.add(input);
    let index = array.indexOf(input);
    let remain = array.filter(s => passed.has(s) === false);
    let smaller = remain.filter(s => array.indexOf(s) < index);
    let larger = remain.filter(s => array.indexOf(s) > index);
    console.log("smaller: " + smaller.length + " " + JSON.stringify(smaller))
    console.log("larger: " + larger.length + " " + JSON.stringify(larger))
    console.log("suggestion: " + (smaller.length > larger.length ? "小" : "大"));
}

异步版

process.stdin.setEncoding('utf8');
process.stdin.on('data', main);

let array = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]
let passed = new Set;

function exit() {
    process.stdin.removeListener('data', main);
    process.exit();
}


function main(input) {
    input = input.replace("\r\n", "");
    if (array.indexOf(input) !== -1) {
        console.log("入牌:" + input)
        processPassed(input)
        return;
    }
    if (input === "R") {
        console.log("重新开始")
        passed.clear();
        return;
    }
    if (input === "exit") {
        console.log("退出")
        exit();
    }
    console.log("请输入 2 到 A,R 重新开始")
}

function processPassed(input) {
    if (passed.has(input)) {
        console.log("请重新选择");
        return;
    }
    passed.add(input);
    let index = array.indexOf(input);
    let remain = array.filter(s => passed.has(s) === false);
    let smaller = remain.filter(s => array.indexOf(s) < index);
    let larger = remain.filter(s => array.indexOf(s) > index);
    console.log("smaller: " + smaller.length + " " + JSON.stringify(smaller))
    console.log("larger: " + larger.length + " " + JSON.stringify(larger))
    console.log("suggestion: " + (smaller.length > larger.length ? "小" : "大"));
}

最后更新于