题解 | #扑克牌大小#
扑克牌大小
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); } })();