消砖块的思想。采用消砖块思想。先消雀头。再削刻子,再削顺子。削雀头是麻将编号Key对应的Value=Value-2。削刻子的方式是Value=Value-3。削顺子的方式是先取mm=min(Valuek,Valuek+1,Valuek+2),然后\sum_{i=key}^{key+2}Valuei=Valuei-mm。
先把麻将记录在二维矩阵tempmetrix里。第一列代表麻将编号Key,第二列是对应麻将号出现次数ValueValue加和为14。如下图
Key Value
1 3
2 2
3 1
4 4
5 3
6
1
假如雀头是2,那么削雀头后,tempmetrix矩阵如下。
Key  Value
1 3
2 0
3 1
4 4
5 3
6 1
遍历Key,依次削刻子,顺子,遇到不能被消掉的项即无法胡牌。则返回。或直到遍历结束,所有Value均被消除,即胡牌。

import copy
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=' ')