InternBootcamp/internbootcamp/libs/game24
2025-05-23 15:27:15 +08:00
..
game24.py init-commit 2025-05-23 15:27:15 +08:00
main.py init-commit 2025-05-23 15:27:15 +08:00
README.md init-commit 2025-05-23 15:27:15 +08:00

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 模块实现高效的谜题生成。
  • 递归算法优化:减少重复计算,提高解决谜题的效率。