麻將之胡牌演算法篇

2021-10-01 19:31:53 字數 3357 閱讀 4812

def

num_to_card

(num)

:"""

:param num: 代表麻將牌的整數

:return: 麻將牌

"""wan =

['%d萬'

% i for i in

range(1

,10)]

tong =

['%d筒'

% i for i in

range(1

,10)]

tao =

['%d條'

% i for i in

range(1

,10)]

fen =

['東風'

,'南風'

,'西風'

,'北風'

] zi =

['發財'

,'白板'

,'中'

] mj_dict =

if num//

16in[1

,2,3

,4,5

]:return mj_dict.get(num//16)

else

: flag =

1return

'癩子'

deflst_mj

(lst)

:"""

:param lst: 乙個包含14個整數的按照從小到大排列的有序列表

:return: 滿足小七對福牌輸出福牌麻將牌列表,不滿足輸出0

"""flag =

0 res =

index1 =

0 r =

len(lst)-1

lz =

10000

while index1 <= r and

not flag:

if lst[index1]

!= lst[index1 +1]

: pack = num_to_card(lst[index1]

) index1 = index1+

1if lst[r]

== lz:

r = r -

1 pack = pack +

'(癩子)'

else

: flag =

1else

:if lst[index1]

!= lz:

pack = num_to_card(lst[index1]

)else

: pack = num_to_card(lst[index1]

) flag =

0 index1 = index1 +

2if flag ==0:

return res

else

:return

0if __name__ ==

'__main__'

: text_samples =

[# no.1: false 4個對子, 4個單牌,2個癩子

[0x11

,0x11

,0x21

,0x22

,0x22

,0x34

,0x34

,0x35

,0x35

,0x36

,0x37

,0x38

,10000

,10000],

# no.2: true 4個對子, 2個單牌,4個癩子

[0x11

,0x11

,0x21

,0x22

,0x22

,0x34

,0x34

,0x35

,0x35

,0x36

,10000

,10000

,10000

,10000],

# no.3: true 14個癩子

[10000

,10000

,10000

,10000

,10000

,10000

,10000

,10000

,10000

,10000

,10000

,10000

,10000

,10000],

# no.4: false 4個對子,1個刻子,2個單牌,1個癩子

[0x11

,0x11

,0x21

,0x21

,0x22

,0x22

,0x22

,0x34

,0x34

,0x35

,0x36

,0x44

,0x44

,10000],

# no.5: true 2個槓,1個刻子,1個對子,1個癩子

[0x11

,0x11

,0x11

,0x11

,0x22

,0x22

,0x22

,0x22

,0x34

,0x34

,0x34

,0x47

,0x47

,10000],

# no.6: false 2個對子, 2個刻子, 2張單牌, 2個癩子

[0x11

,0x11

,0x11

,0x22

,0x34

,0x34

,0x34

,0x35

,0x36

,0x36

,0x54

,0x54

,10000

,10000],

# no.7: false 9個單牌, 5個癩子

[0x12

,0x13

,0x14

,0x15

,0x16

,0x17

,0x18

,0x19

,0x20

,0x10000

,10000

,10000

,10000

,10000]]

print

("***測試結果如下,滿足小七對輸出福牌列表,不滿足輸出0***"

)for sample in text_samples:

card_list = lst_mj(sample)

print

('no.%d: '

%(text_samples.index(sample)+1

), card_list)

麻將胡牌演算法

majiang algorithm是帶多張鬼牌的通用胡牌演算法,採用查表方式,簡單高效。在生成表的階段,時間是不值錢的,所以生成方法我們可以任意窮舉。首先分為普通 風 箭三張表。窮舉出所有的key,比如普通表,就是000000000 444420000,因為每一種牌最大4張,且總和不超過14張牌。對...

麻將胡牌演算法 C

這裡只介紹普通的麻將胡牌演算法,也就是7個對子或者 1個對子 3 n n 三個順子或者三個一樣的 其中字牌 東南西北中發白 不能算順子。首先對於每張牌 它有牌的的數字 1 9,牌的種類 萬條筒以及字 所以先封裝乙個牌的包裝類。如果要和伺服器互動的話就應該給這個類序列化 即加上system.seria...

麻將胡牌判決

胡牌有以下幾種情況 1 乙個對子 4組 3個相同的牌或者順子。只有m s p是可以構成順子的。東西南北這樣的牌沒有順子。2 7個不同的對子。3 1m,9m,1p,9p,1s,9s,1c,2c,3c,4c,5c,6c,7c.這13種牌每種都有,而且僅有這13種牌。肯定是有一種2張。其他的1張。首先是列...