题解 | #扑克牌大小#
扑克牌大小
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; // 解题思路: // 两副手牌主要分为两种情况,一种手牌数量不对等,另一种手牌数量对等。 // 第一种情况进行分析,判断两副手牌含有炸弹和王炸的情况,都没有则输出错误,都有则输出手牌数量少的(必然是王炸),否则就输出有炸弹或王炸的那副手牌 // 第二种情况就简单多了,只要有可能是个子,对子,三个,炸弹,顺子相互比较。顺子已经从小到大排列好了。所以这几种手牌都只需要比较首张牌的大小 void (async function () { while ((line = await readline())) { let inputArr = line.split('-').map(item => item.split(' ')); let left = inputArr[0],right = inputArr[1]; let minCard = left.length >= right.length ? right : left;//定义牌数较少的一边 let map = new Map([ ['3',3], ['4',4], ['5',5], ['6',6], ['7',7], ['8',8], ['9',9], ['10',10], ['J',11], ['Q',12], ['K',13], ['A',14], ['2',15], ['joker',16], ['JOKER',17], ]); if(left.length !== right.length){//先看第一种情况,左右牌数不等的情况 if(isBoomOr2Joker(left) && isBoomOr2Joker(right)){ //两边都是炸弹或者王炸,则必然一个是王炸,牌少的是王炸,直接打印 console.log(minCard.join(' ')); } else if(!isBoomOr2Joker(left) && !isBoomOr2Joker(right)){ //两边都不是炸弹或王炸,说明牌型不同,直接报错 console.log('ERROR') } else { //说明一边是炸弹或王炸,一边是其他牌型, //需要找出哪一边是炸弹或王炸 if(isBoomOr2Joker(left)){ console.log(left.join(' ')) } else { console.log(right.join(' ')) } } } else {//再看第二种情况,左右牌数相等等的情况 //只需要比较第一张即可 let lFirst = left[0],rFirst = right[0]; if(map.get(lFirst) > map.get(rFirst)){ console.log(left.join(' ')); } else { console.log(right.join(' ')); } } } //判断有炸弹或者王炸 function isBoomOr2Joker(arr){ if(arr.length === 4) return true; if(arr[0].toLowerCase() === 'joker') return true; return false; } })();