消砖块的思想。采用消砖块思想。先消雀头。再削刻子,再削顺子。削雀头是麻将编号Key对应的Value=Value-2。削刻子的方式是Value=Value-3。削顺子的方式是先取mm=min(Valuek,Valuek+1,Valuek+2),然后Valuei=Valuei-mm。
先把麻将记录在二维矩阵tempmetrix里。第一列代表麻将编号Key,第二列是对应麻将号出现次数Value,Value加和为14。如下图
Key | Value |
1 | 3 |
2 | 2 |
3 | 1 |
4 | 4 |
5 | 3 |
6 |
1
|
Key | Value |
1 | 3 |
2 | 0 |
3 | 1 |
4 | 4 |
5 | 3 |
6 | 1 |
def check_head(head,base_metrix):
if(base_metrix[head]<2) :return False;
tempmetrix={}
tempmetrix=copy.copy(base_metrix);
tempmetrix[head]=tempmetrix[head]-2;
for i in base_metrix.keys():
if(tempmetrix[i]>=3):tempmetrix[i]=tempmetrix[i]-3;
if( i in tempmetrix and i+1 in tempmetrix and i+2 in tempmetrix and tempmetrix[i]>0 and tempmetrix[i+1]>0 and tempmetrix[i+2]>0):
mm=min(tempmetrix[i],tempmetrix[i+1],tempmetrix[i+2])
tempmetrix[i:i+2]=tempmetrix[i:i+2]-mm;
tempmetrix[i+1]= tempmetrix[i+1]-mm;
tempmetrix[i+2]= tempmetrix[i+2]-mm;
if(tempmetrix[i]>0):
return False;
return True;
def is_hu(comb_list):
base_metrix={}
for i in comb_list:
base_metrix[i]=1 if(i not in base_metrix) else base_metrix[i]+1;
if(base_metrix[i]>4):return False;
for head in base_metrix.keys():
if check_head(head,base_metrix):return True;
return False;
cardList=list(map(int,input().strip().split(' ')));
hu_list=[];
for card in range(1,10):
comb_list=[];
comb_list=copy.copy(cardList);
comb_list.append(card)
comb_list.sort()
if is_hu(comb_list):
hu_list.append(card);
if len(hu_list)==0:
print(0)
else:
for card in hu_list:
print(card, end=' ')