题解 | #扑克牌大小#
扑克牌大小
https://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.on('line', function (line) {
const tokens = line.split('-');
let arg = tokens.map(str => {
return str.split(' ').map(it => {
if(it === 'J') return 11;
if(it === 'Q') return 12;
if(it === 'K') return 13;
if(it === 'A') return 14;
if(it === '2') return 15;
if(it === 'joker') return 16;
if(it === 'JOKER') return 17;
return +it;
})
});
let res = sol(arg);
if(res === -1){
console.log('ERROR');
}else{
console.log(tokens[res]);
}
});
function sol(arg: number[][]){
let [p1, p2] = arg;
// 一般情况下,牌型相同(牌的数量相同才能进行比较)
if(p1.length === p2.length){
return p1[0] > p2[0] ? 0 : 1;
}
if(p1.length === 2 && p1[0] === 16) return 0;
if(p2.length === 2 && p2[0] === 16) return 1;
if(p1.length === 4) return 0;
if(p2.length === 4) return 1;
return -1;
}
没什么算法。纯暴力。
在获取输入的时候通过'-'和' '将字符串拆分成单个牌面,然后将花牌映射成数字。通过数组长度区别牌型,数组长度相同视为相同牌型(只需要比较数组第一个元素即可区分大小,一开始想将两张牌和四张牌单独拿出来分析,因为涉及到炸弹和大小王,但是后来发现,炸弹和炸弹的比较,乃至对子和大小王的比较都只需要比较第一个元素大小即可),可以进行比较。当数组长度不相同时,只有炸弹和双王可以和其他牌型比较,如果是双王则返回双王,如果是炸弹则返回炸弹,否则返回ERROR

