| .. | ||
| game24.py | ||
| main.py | ||
| README.md | ||
Game24Plus - 数学谜题生成与解决工具
Game24Plus 是一个用于生成和解决类似于“24点游戏”的数学谜题的 Python 工具。它通过加、减、乘、除四种基本运算,将给定的数字组合成目标数字。该工具支持生成不同数量和范围的数字组合,并提供多种生成方式,包括单进程和多进程并行处理。
功能特性
- 生成数学谜题:生成指定数量和范围的数字组合,并通过随机运算生成目标数字。
- 解决谜题:递归地尝试所有可能的运算组合,找到达到目标数字的解决方案。
- 多进程并行处理:支持多进程并行生成谜题,提高生成效率。
- 数据保存:生成的谜题和解决方案以 JSONL 格式保存到文件中。
代码结构
主要类与方法
Game24Plus 类
-
__init__(self, num_numbers, range_max, target_max, seed=None)
初始化随机数生成器、数字数量、数字范围、目标数字范围等。 -
sample_one_number(self, num_min, num_max)
生成一个指定范围内的随机整数。 -
get_numbers(self)
生成一组随机整数并排序。 -
enumerate_all_numbers(self, num_numbers)
枚举所有可能的数字组合(递归实现)。 -
sample_operation(self, numbers)
从数字列表中随机选择两个数字和一个运算符,返回运算表达式。 -
calculate(self, n1, op, n2)
根据运算符计算两个数字的结果,处理除法时使用分数。 -
get_target(self, numbers)
通过随机运算将数字列表逐步减少,直到得到一个目标数字,并记录运算过程。 -
get_target_limit_range(self, numbers)
在指定范围内生成目标数字,避免无效结果。 -
solve(self, numbers, target)
递归地尝试所有可能的运算组合,找到达到目标数字的解决方案。
主要函数
-
construct_game24_v1
生成指定数量的谜题,并将结果保存为 JSONL 文件。 -
construct_helper
辅助函数,用于生成指定目标范围内的谜题。 -
construct_game24_v3
使用多进程并行生成谜题,提高生成效率。 -
construct_helper_for_v4
辅助函数,用于多进程版本的谜题生成。 -
construct_game24_v4
使用多进程和多队列实现高效的谜题生成。
使用示例
生成谜题
from game24plus import Game24Plus
# 初始化
game = Game24Plus(num_numbers=4, range_max=100, target_max=1000)
# 生成一组数字
numbers = game.get_numbers()
print("生成的数字:", numbers)
# 生成目标数字和运算过程
target, operations = game.get_target_limit_range(numbers)
print("目标数字:", target)
print("运算过程:", operations)
解决谜题
# 解决谜题
solution = game.solve(numbers, target=24)
if solution:
print("解决方案:", solution)
else:
print("无解")
批量生成谜题
python game24plus.py --num_numbers 4 --output_dir data/gameX/raw_1104
参数说明
num_numbers:生成谜题的数字数量(默认为 4)。range_max:生成数字的最大值(默认为 101)。target_max:目标数字的最大值(默认为 1000)。num_samples:生成的谜题数量(默认为 200000)。seed:随机数种子(默认为 1234)。num_workers:多进程并行处理的工作进程数量(默认为 64)。output_dir:输出文件的保存目录(默认为当前目录)。
输出文件格式
生成的谜题和解决方案以 JSONL 格式保存,每行包含一个 JSON 对象,例如:
{
"puzzle": "3 4 6 8",
"target": "24",
"operations": [
["3", "*", "8", "24"],
["4", "+", "6", "10"],
["10", "-", "3", "7"]
]
}
性能优化
- 多进程并行处理:通过
multiprocessing模块实现高效的谜题生成。 - 递归算法优化:减少重复计算,提高解决谜题的效率。