题解 | #扑克牌大小#

扑克牌大小

https://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb

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

function comparePoker(poker1, poker2) {
    poker1 = poker1.replace(/10/g, "T");
    poker2 = poker2.replace(/10/g, "T");
    const rankMap = {
        3: 0,
        4: 1,
        5: 2,
        6: 3,
        7: 4,
        8: 5,
        9: 6,
        T: 7,
        J: 8,
        Q: 9,
        K: 10,
        A: 11,
        2: 12,
        joker: 13,
        JOKER: 14,
    };
    const typeMap = {
        single: 0,
        pair: 1,
        triple: 2,
        straight: 3,
        bomb: 4,
        rocket: 5,
    };
    // 解析牌型
    const poker1Type = getPokerType(poker1, rankMap);
    const poker2Type = getPokerType(poker2, rankMap);
    // 对王是最大的牌
    if (poker1Type === "rocket") return poker1;
    if (poker2Type === "rocket") return poker2;
    // 炸弹大于其他牌型
    if (poker1Type === "bomb" && poker2Type !== "bomb") return poker1;
    if (poker2Type === "bomb" && poker1Type !== "bomb") return poker2;
    // 同类型牌型比较大小
    if (poker1Type === poker2Type) {
        if (poker1Type === "single") {
            if (rankMap[poker1] > rankMap[poker2]) return poker1;
            else return poker2;
        }
        if (rankMap[poker1[0]] > rankMap[poker2[0]]) return poker1;
        else return poker2;
    }
    // 不存在比较关系
    return "ERROR";
}
function getPokerType(poker, rankMap) {
    const cards = poker.split(" ");
    const len = cards.length;
    // 对王
    if (len === 2 && cards.includes("joker") && cards.includes("JOKER")) {
        return "rocket";
    }
    // 单张
    if (len === 1) return "single";
    // 对子、三个和炸弹
    if (len >= 2 && len <= 4) {
        if (cards.every((card) => card === cards[0])) {
            if (len === 2) return "pair";
            if (len === 3) return "triple";
            if (len === 4) return "bomb";
        } else {
            return "ERROR";
        }
    }
    // 顺子
    if (len === 5) {
        for (let i = 1; i < len; i++) {
            if (rankMap[cards[i]] - rankMap[cards[i - 1]] !== 1) {
                return "ERROR";
            }
        }
        return "straight";
    }

    // 非法牌型
    return "ERROR";
}

void (async function () {
    // Write your code here
    while ((line = await readline())) {
        const [p1, p2] = line.split("-");
        const result = comparePoker(p1, p2).replace(/T/g, '10');
        console.log(result);
    }
})();

全部评论

相关推荐

05-05 21:45
已编辑
广州大学 Java
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务