题解 | #扑克牌大小#

扑克牌大小

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;
    }
})();

全部评论

相关推荐

找到实习了 给了150一天 但是说是低代码 值得去吗
码农索隆:是在没实习,可去,待个一两周,不行就润呗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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