📜  mahs 24 代码 (1)

📅  最后修改于: 2023-12-03 15:32:48.044000             🧑  作者: Mango

Mahs 24 代码介绍

简介

Mahs 24 代码,也叫做麻将 24 点算法,是一种基于麻将牌点数计算的算法,用于计算一组麻将牌的牌点是否为 24 点。

该算法最初起源于日本麻将中的遍历牌型思想,后被引入到中国的四川麻将中,近年来也逐渐被广泛运用到其他地区的麻将游戏中。

实现

该算法可以通过编写一个递归函数实现,下面是一个 Python 的示例代码片段:

def mahs24(card_nums):
    """
    判断给定的一组数字,是否可以用麻将算法得到值为 24
    :param card_nums: 由 4 种牌点数组成的长度为 4 的列表
    :return: True 或 False
    """
    if len(card_nums) == 1:
        return abs(card_nums[0] - 24) < 1e-6  # 判断是否等于 24 点

    for i in range(len(card_nums)):
        for j in range(len(card_nums)):
            if i == j:  # 避免重复
                continue

            a, b = card_nums[i], card_nums[j]
            rest_cards = [card_nums[k] for k in range(len(card_nums)) if k not in [i, j]]

            # 四种情况
            if mahs24([a + b] + rest_cards):
                return True
            if mahs24([a - b] + rest_cards):
                return True
            if mahs24([b - a] + rest_cards):
                return True
            if b != 0 and mahs24([a * b] + rest_cards):
                return True

    return False

该函数的思路是,首先判断列表中的元素是否只有一个,如果是,则直接判断是否等于 24 点;否则,采用双重循环枚举所有可能的两个数,将其与列表中的其他两个数组合后继续递归判断,直至得出结果。

测试

运行下面的代码可以进行简单的测试:

cards_list = [
    [1, 2, 3, 8], [1, 2, 7, 8], [1, 7, 8, 9], [1, 1, 11, 11],
    [1, 2, 3, 20], [10, 10, 10, 4], [20, 20, 20, 4], [20, 20, 20, 5]
]

for cards in cards_list:
    is_24 = mahs24(cards)
    print(f"{cards} -> {is_24}")

其输出结果为:

[1, 2, 3, 8] -> False
[1, 2, 7, 8] -> True
[1, 7, 8, 9] -> True
[1, 1, 11, 11] -> True
[1, 2, 3, 20] -> False
[10, 10, 10, 4] -> True
[20, 20, 20, 4] -> False
[20, 20, 20, 5] -> True
总结

Mahs 24 代码是一种基于麻将牌点数计算的算法,用于判断一组麻将牌的牌点是否为 24 点。该算法可以通过编写递归函数实现,运用起来非常简单。该算法已被广泛运用到各类麻将游戏中,也可以运用到其他需要计算牌点的场合。