当前位置: 首页 > 面试经验 >

存一个去哪儿后端笔试9.7 第3题德扑

优质
小牛编辑
165浏览
2023-03-28

存一个去哪儿后端笔试9.7 第3题德扑

过了88%
# 翻牌
# @param inHand string字符串 一组以单空格间隔的手牌(例如:SA HK H9 D8 C5 S5 H4)
# @return string字符串
#
from collections import defaultdict
class Solution:
    def is_continuous(self,nums):
        count = 1
        record = [nums[0]]
        for i in range(1,len(nums)):
            if(count>=4 and record[0]==13 and nums[-1]==1):    # 最高顺子
                return "B"
            if(count>=5):    # 顺子
                return "b"
            if(nums[i-1]==nums[i]+1):
                count += 1
                record.append(nums[i])
            elif(nums[i-1]==nums[i]):
                pass
            else:
                count = 1
                record = [nums[i]]
        if(count>=4 and record[0]==13 and nums[-1]==1):    # 最高顺子
            return "B"
        if(count>=5):    # 顺子
            return "b"
        return False
    
    def check_same(self,nums):
        same_num = []
        count = 1
        for i in range(1,len(nums)):
            if(nums[i-1]==nums[i]):
                count += 1
            else:
                if(count>1):
                    same_num.append(count)
                count = 1
        if(count>1):
            same_num.append(count)
        return same_num
            
    def showDown(self , inHand: str) -> str:
        cards = inHand.split(" ")
        attr = set()
        # check tonghua
        all_type = "SHCD"
        buckets = defaultdict(int)
        flag = False
        for c in cards:
            for t in all_type:
                if(t in c):
                    buckets[t] += 1
                    if(buckets[t]>=5):
                        attr.add("a")
                        flag = True
                    break
            if(flag):
                break
        # check shunzi
        nums = []
        for c in cards:
            if(c[1:]=="A"):
                nums.append(1)
            elif(c[1:]=="J"):
                nums.append(11)
            elif(c[1:]=="Q"):
                nums.append(12)
            elif(c[1:]=="K"):
                nums.append(13)
            else:
                nums.append(int(c[1:]))
        nums.sort(reverse=-1)
        flag = self.is_continuous(nums)
        if(flag=="B" and "a" in attr):
            return "HuangJiaTongHuaShun"
        if(flag=="b" and "a" in attr):
            return "TongHuaShun"
        if(flag!=False):
            attr.add(flag)
        # check same number
        same_num = self.check_same(nums)
        for num in same_num:
            if(num==4):
                return "SiTiao"
            if(("c"+str(num)) in attr):
                attr.add("c"+str(num)+".")
            else:
                attr.add("c"+str(num))
        # other situations
        if("c3" in attr and "c2" in attr):
            return "HuLu"
        if("a" in attr):
            return "TongHua"
        if("b" in attr&nbs***bsp;"B" in attr):
            return "ShunZi"
        if("c3" in attr):
            return "SanTiao"
        if("c2" in attr and "c2." in attr):
            return "LiangDui"
        if("c2" in attr):
            return "YiDui"

nums = [
    "SA SK SQ SJ S10 H10 C9",       # 皇家同花顺
    "S2 SK SQ SJ H10 S10 S9",       # 同花顺
    "S10 S10 SQ SJ S10 H10 C9",     # 四条
    "S10 H10 SQ SJ C10 CQ",         # HULU
    "SA SK S3 SJ S10 H10 C9",       # tonghua
    "SA SK S3 SJ S10 H10 C9",       # tonghua
    "S10 H10 SQ SJ C10 C9",         # SANTIAO
    "SK HQ H5 S4 S3 C2 CA",          # SHUNZI
    "SK HK H4 S4 S3 C3 CK"          # LIANGDUI
    ]
s = Solution()
for num in nums:
    print(s.showDown(num))



 类似资料: