Skip to content

同花顺判断 题目描述 什么是同花顺:5张牌,牌面数字能够连续,则是顺子;花色相同则为同花;能找出5张花色相同且牌面数字连续的,即是同花顺。 特殊规则:A,既能和2,3,4,5 连成顺子,也能和10,J,Q,K连成顺子 使用 JavaScript 实现判断 8 张牌中是否有 5 张可以组成同花顺

ts
interface card{
    huase:'A'|'B'|'C'|'D'
    value:number
}

const isShunzi = (arr:card[]) =>{
    const mapp = {
        'A':0,
        'B':0,
        'C':0,
        'D':0
    }
    for(const key in mapp) {
        mapp[key] = 0;
    }
    arr.sort((a,b)=>{
        return b.value - a.value
    })
    const set = new Set()
    const arr2:any[] = arr.map(item=>{
        if(!set.has(item.value)){
            set.add(item.value)
            return item
        }else{
            mapp[item.huase]++
            return null
        }
    }).filter(Boolean)

    if (arr2.length < 5) return false
    for(const key in mapp){
        if (mapp[key] >= 5){
            continue
        } else {
            return false
        }
    }
    const len = arr2.length

    for(let index=0;index<len-4;index++){
        let flag = arr2[index].huase

        if(arr2[index].value === 1){
            for(let idx = 1; idx <= 4; idx++) {
                if(arr2[len-idx].huase !== flag) {
                    return false  // 直接返回 false
                }
            }
        }

        if(arr2[index].value + 4 !== arr2[index+4].value) {
            return false
        }

        for(let idx = 1; idx <= 4; idx++) {
            if(arr2[index+idx].huase !== flag) {
                return false  // 直接返回 false
            }
        }
    }
    return true;
}
本站访客数 人次 本站总访问量