日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

麻将胡牌算法带癞子 python实现

發(fā)布時間:2024/3/7 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 麻将胡牌算法带癞子 python实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

姐姐:你去幫我和閨蜜打麻將?

學(xué)霸哥哥:可是我不會打麻將呀!

姐姐:你不是學(xué)霸嗎?我教你一個麻將公式,我閨蜜可是單身喲!

學(xué)霸哥哥:什么公式?

姐姐:麻將胡牌公式: AAA*M+ABC*N+BB,WMN可以為任意數(shù),胡牌里面有且只有一對!

學(xué)霸哥哥:原來麻將還可以這樣玩。好的 地址微信發(fā)給我,馬上到!

通過這個對話,我想大家應(yīng)該都能明白麻將的胡牌公式是怎么樣了,如果只是簡單的麻將胡牌,我想算法實現(xiàn)起來就比較的簡單。

第一步:

我們挑出所有的對子(如果牌中一個對子就沒有,那么就不能胡牌

第二步:

一次從牌里面去掉對子

第三步:

每次for循環(huán)跳3個數(shù),看這3個數(shù)是否為ABC,AAA.如果都滿足這樣的條件,則這一副牌就可以胡牌。如果不滿足這個條件,則沒有胡牌。

這個我們用python實現(xiàn)算法就比較的簡單,也比較的好理解。下面我們給出python的胡牌實現(xiàn)算法!這個里面多增加了一個7對的胡牌,大家可以看一下,看是否理解這個算法,也可以自己復(fù)制一下代碼,跑一下看一下效果。

def hupaiAlgorithm(self,handStr):a =handStr[:]if len(a) % 3 != 2:return Falsedouble = []for x in set(a):if a.count(x) >= 2:double.append(x)if len(double) == 0:return False#7對胡牌qidui = Trueif len(a) == 14:for x in set(a):if a.count(x) not in [2, 4]:qidui = Falsebreakelse:qidui = Falseif qidui:return True a1 = a.copy()a2 = [] for x in double:a1.remove(x)a1.remove(x)a2.append((x, x))for i in range(int(len(a1) / 3)):if a1.count(a1[0]) == 3:a2.append((a1[0],) * 3)a1 = a1[3:]elif a1[0] in a1 and a1[0] + 1 in a1 and a1[0] + 2 in a1: a2.append((a1[0], a1[0] + 1, a1[0] + 2))a1.remove(a1[0] + 2)a1.remove(a1[0] + 1)a1.remove(a1[0])else:a1 = a.copy()a2 = []breakelse:return Trueelse:return False

如果上面的胡牌算法理解了,那么恭喜你,你接下來就可以看一下帶萬能牌的四川麻將胡牌算法了!

最終的測試效果

首先我們來理解一下帶萬能牌的四川麻將如何才能胡牌,帶完成牌的意思就是,萬能牌可以代替任何一張麻將牌,只要最后的麻將能,滿足那個公式就能胡牌。這個是重點,必須要理解這個重點,才能完成萬能牌的胡牌算法!

我們結(jié)合上面正常麻將的胡牌思路,大家再想一想,如果正常牌不能胡牌,帶萬能牌能胡牌,是不是我們?nèi)f能牌就只能代替下面3種情況才能胡牌:

我們看這手牌:112245777萬能萬能

1.當(dāng)有2張牌不能成為ABC時,替換中間一張牌使牌成為ABC,比如45,萬能牌變成345或者是456.

2.當(dāng)牌中的對子>1,且不能滿足7對胡牌的時候。萬能牌代替牌中的任何一個對子,比如在我們舉例的牌里面?萬能牌就只能代替1或者是2.?

通過我們2萬能牌的替換:

這手牌就變成了下面這種情況

112245777萬能萬能=》11122345777.

我們通過這樣的變化,是不是就可以胡牌了。

3.當(dāng)牌中沒有一個對子的時候,萬能牌就只能替換成其中的某一張牌,成為一個對子看是否滿足胡牌的公式。

比如:1234567萬能

這點萬能牌就可以替換成1,4,7其中的任何一張牌,使牌變成:1123456,12344567,12345677.

萬能牌能替換的這3種方式,這點大家有沒有理解,如果理解了,接下來我們就可以來討論,具體的算法怎么實現(xiàn)了。如果沒有理解的同學(xué),可以反復(fù)觀看幾次,必須要先理解這3點的替換思路才能夠更好的理解算法。(這點我們不討論7對的特殊胡牌算法)。

還有一點就是萬能牌使用的次數(shù)只能小于等于萬能牌的數(shù)量,這點也很重要。

通過上面的講解我們就能很好的實現(xiàn)算法了,我們只需要在正常的胡牌算法里面改動一下就能實現(xiàn)萬能牌的胡牌算法了。大體思路還是按照正常的胡牌算法來,只是在需要使用萬能牌的時候,我們替換一下萬能牌,然后把萬能牌的數(shù)量-1,最后看使用萬能牌的數(shù)量使用超過了已有的萬能牌數(shù)量。里面增加一個7對的萬能牌胡牌算法!

def hupaiAlgorithm(self,handStr,laziCnt):a =handStr[:]a2=handStr[:]if (len(a)+laziCnt) % 3 != 2:return False,a2double = []if laziCnt >0:for x in set(a): if x not in double:double.append(x)for x in set(a):if a.count(x) >= 2 and x not in double:double.append(x)if len(double) == 0:# print('和牌失敗:無對子')return False,a2if laziCnt == 0:qidui = Trueif len(a) == 14:for x in set(a):if a.count(x) not in [2, 4]:qidui = Falsebreakelse:qidui = Falseif qidui:return True,a2 else:for card in a:cardArr=[[],[],[],[]]for card in a:iCnt = a.count(card)# print("iCnt:",iCnt,"handCards:",a)if card not in cardArr[iCnt-1]:cardArr[iCnt-1].append(card)if len(cardArr[0])+len(cardArr[2]) == laziCnt:huCard=[]for i in range(4):if i==0:huCard = huCard + cardArr[i]*2else:huCard = huCard + cardArr[i]*(i+1)huCard.sort() return True,huCarda1 = a.copy()a2 = [] # a2用來存放和牌后分組的結(jié)果。for x in double:if x in a1:a1.remove(x)if x in a1:a1.remove(x) a2.append((x, x))nUseLaziCnt =0index = 0isNohuCard = Falsewhile(len(a1)>0 and isNohuCard == False):a1Card = a1[0]if a1.count(a1Card)==3:a2.append((a1Card,) * 3)a1 = a1[3:] elif a1Card in a1 and a1Card + 1 in a1 and a1Card + 2 in a1 and( int(a1Card/10) == int((a1Card+1)/10) and int((a1Card+1)/10) == int((a1Card+2)/10) ): # 這里注意,11,2222,33,和牌結(jié)果22,123,123,則連續(xù)的3個可能不是相鄰的。a2.append((a1Card, a1Card + 1, a1Card + 2))a1.remove(a1Card + 2)a1.remove(a1Card + 1)a1.remove(a1Card)elif((a1Card in a1 and a1Card+1 in a1 and (int(a1Card//10) == int((a1Card+1)//10))) or (a1Card in a1 and a1Card+2 in a1 and (int(a1Card//10) == int((a1Card+2)//10)) )) and (nUseLaziCnt<laziCnt):a2.append((a1Card, a1Card + 1, a1Card + 2)) if a1Card in a1: a1.remove(a1Card)if a1Card+1 in a1: a1.remove(a1Card + 1)if a1Card+2 in a1: a1.remove(a1Card + 2)nUseLaziCnt = nUseLaziCnt +1elif a1.count(a1Card)==2 and (nUseLaziCnt<laziCnt):a2.append((a1Card, a1Card, a1Card)) if a1Card in a1: a1.remove(a1Card)if a1Card in a1: a1.remove(a1Card)nUseLaziCnt = nUseLaziCnt +1 else:if len(a1)==1 and (laziCnt -nUseLaziCnt) ==2 :a2.append([a1Card]*3)if a1Card in a1: a1.remove(a1Card)else: a1 = a.copy()a2 = [] isNohuCard = Trueif isNohuCard == False:return True,a2 else:return False,handStr

算法里面有一個7對的胡牌算法:

這里來講解一下如何實現(xiàn)的。7對胡牌,最后胡牌里面就是?全是對子?或者有4條。有且只有這2種牌型。我們就很好實現(xiàn)了,我們定義一個多維數(shù)組,一次記錄牌出現(xiàn)1,2,3,4張的情況。我們只需要把出現(xiàn)一張牌的數(shù)量和3張牌的數(shù)量相加。2則是否剛好等于萬能麻將的數(shù)量就可以了。

for card in a:cardArr=[[],[],[],[]]for card in a:iCnt = a.count(card)# print("iCnt:",iCnt,"handCards:",a)if card not in cardArr[iCnt-1]:cardArr[iCnt-1].append(card)if len(cardArr[0])+len(cardArr[2]) == laziCnt:huCard=[]for i in range(4):if i==0:huCard = huCard + cardArr[i]*2else:huCard = huCard + cardArr[i]*(i+1)huCard.sort() return True,huCard

你品,你細(xì)細(xì)品一下,看是不是這個道理。下面給大家看一個截圖,帶萬能麻將的胡牌效率。

一個萬能牌的情況,理論上4個萬能和1個萬能使用的時間差不多,都是毫秒級別的。如果這個四川萬能麻將的胡牌算法,能滿足一切的需求。

有了這個核心的胡萬能牌算法,接下來得?聽牌算法,是否胡萬能的算法就很容易實現(xiàn)了!?

總結(jié)

以上是生活随笔為你收集整理的麻将胡牌算法带癞子 python实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 污片视频在线观看 | 国产精品久久久久精 | 精品一区在线 | 国产偷人| 免费在线视频观看 | 高清av一区二区 | 日韩精品视频在线观看网站 | 欧美日韩视频网站 | 伊人伊人伊人 | 黄色尤物视频 | 国产噜噜噜噜噜久久久久久久久 | 中韩毛片 | 国产精品刺激 | 正在播放91 | 久草福利资源 | 辟里啪啦国语版免费观看 | 国产三级久久 | 亚洲精品伊人 | 色婷婷综合激情 | 茄子视频懂你更多在线观看 | 免费看91 | 他揉捏她两乳不停呻吟动态图 | brazzers精品成人一区 | 国产精品无遮挡 | 精品人妻一区二区三区麻豆91 | 白洁av| 综合在线观看 | 欧美嫩草 | www.色婷婷.com | 国产传媒在线播放 | 国产午夜啪啪 | 偷拍视频一区 | 色婷婷综合网 | 国产网红主播精品av | 日韩欧美性视频 | 91网址在线播放 | 精品人妻av一区二区三区 | 免费午夜人成电影 | 欧美a在线| 国产黄色三级网站 | 中文字幕精品一区二区精 | 欧美巨鞭大战丰满少妇 | 久久久午夜电影 | 国产男女裸体做爰爽爽 | 亚洲日本色图 | 日日夜夜狠狠爱 | 清纯粉嫩极品夜夜嗨av | 男女一级特黄 | 国产二三区 | 国产玖玖视频 | 在线看片你懂 | 国产国产乱老熟女视频网站97 | 91亚洲精品视频 | 在线视频在线观看 | 免费污网站在线观看 | 国产成人无码精品久久久久 | 久久青草免费视频 | 日本免费三片在线播放 | 色猫咪av | 日韩免费播放 | 国产美女视频一区二区 | 米奇色| 亚洲成人一级 | 欧美特级aaa | 国产大片中文字幕在线观看 | 国产jjizz一区二区三区视频 | 风韵多水的老熟妇 | 在线精品亚洲欧美日韩国产 | 亚洲乱熟女一区二区三区小说 | 久久综合一区二区三区 | 动漫艳母在线观看 | 中国丰满熟妇xxxx性 | 99精品人妻无码专区在线视频区 | av在线片 | 一区二区日韩电影 | 丁香啪啪综合成人亚洲 | 久久久久久久久国产 | 欧美高大丰满少妇xxxx | 无套内谢少妇毛片 | 久久综合激情网 | 亚洲男人的天堂在线观看 | 国产精品久久久久久久av | 日本黄色一区二区三区 | 涩涩网站视频 | 亚洲精品一区二区三区不卡 | 日本边添边摸边做边爱 | 午夜三级视频 | 黄色av免费在线观看 | 波多野吉衣伦理片 | 97人妻精品一区二区三区软件 | 欧美一级全黄 | 久草免费在线观看 | 蜜桃tv一区二区三区 | 亚洲精品嫩草 | 欧美一级不卡 | 色偷偷噜噜噜亚洲男人 | 啪啪精品 | 国产一区二区在线免费 | 国产男女视频在线观看 |