题解 | #扑克牌大小#
扑克牌大小
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);
}
})();
查看9道真题和解析
