01 小七对算法实现
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 = {
1: wan[num % 16 - 1],
2: tong[num % 16 - 1],
3: tao[num % 16 - 1],
4: fen[num % 16 % 3- 1],
5: zi[num % 16 % 3 - 1],
}
if num//16 in [1, 2, 3, 4, 5]:
return mj_dict.get(num//16)
else:
flag = 1
return '癞子'
def lst_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])
res.append(pack)
index1 = index1+1
if lst[r] == LZ:
r = r - 1
pack = pack + '(癞子)'
res.append(pack)
else:
flag = 1
else:
if lst[index1] != LZ:
pack = num_to_card(lst[index1])
res.append(pack)
res.append(pack)
else:
pack = num_to_card(lst[index1])
res.append(pack)
res.append(pack)
flag = 0
index1 = index1 + 2
if flag == 0:
return res
else:
return 0
if __name__ == '__main__':
text_samples = [
[0x11, 0x11, 0x21, 0x22, 0x22, 0x34, 0x34, 0x35, 0x35, 0x36, 0x37, 0x38, 10000, 10000],
[0x11, 0x11, 0x21, 0x22, 0x22, 0x34, 0x34, 0x35, 0x35, 0x36, 10000, 10000, 10000, 10000],
[10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000, 10000],
[0x11, 0x11, 0x21, 0x21, 0x22, 0x22, 0x22, 0x34, 0x34, 0x35, 0x36, 0x44, 0x44, 10000],
[0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, 0x34, 0x34, 0x34, 0x47, 0x47, 10000],
[0x11, 0x11, 0x11, 0x22, 0x34, 0x34, 0x34, 0x35, 0x36, 0x36, 0x54, 0x54, 10000, 10000],
[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)