zzx commited on
Commit
4f17245
·
1 Parent(s): 5e3d269

mcp for 24 point game

Browse files
Files changed (1) hide show
  1. solve_24_game.py +55 -0
solve_24_game.py ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import itertools
2
+
3
+ def solve_24_game(nums):
4
+ if not isinstance(nums, list) or len(nums) != 4:
5
+ raise ValueError("input 4 number:")
6
+ ops = ['+', '-', '*', '/']
7
+ for p_nums in itertools.permutations(nums):
8
+ for p_ops in itertools.product(ops, repeat=3):
9
+ try:
10
+ expr = f"({p_nums[0]}{p_ops[0]}{p_nums[1]}){p_ops[1]}{p_nums[2]}{p_ops[2]}{p_nums[3]}"
11
+ if abs(eval(expr) - 24) < 1e-6:
12
+ return expr
13
+ except (ZeroDivisionError, SyntaxError):
14
+ pass
15
+ try: # 形式: a op (b op c) op d
16
+ expr = f"{p_nums[0]}{p_ops[0]}({p_nums[1]}{p_ops[1]}{p_nums[2]}){p_ops[2]}{p_nums[3]}"
17
+ if abs(eval(expr) - 24) < 1e-6:
18
+ return expr
19
+ except (ZeroDivisionError, SyntaxError):
20
+ pass
21
+ try: # 形式: a op b op (c op d)
22
+ expr = f"{p_nums[0]}{p_ops[0]}{p_nums[1]}{p_ops[1]}({p_nums[2]}{p_ops[2]}{p_nums[3]})"
23
+ if abs(eval(expr) - 24) < 1e-6:
24
+ return expr
25
+ except (ZeroDivisionError, SyntaxError):
26
+ pass
27
+
28
+ try: # 形式: (a op b op c) op d (需要进一步细分括号)
29
+ expr = f"(({p_nums[0]}{p_ops[0]}{p_nums[1]}){p_ops[1]}{p_nums[2]}){p_ops[2]}{p_nums[3]}"
30
+ if abs(eval(expr) - 24) < 1e-6:
31
+ return expr
32
+ except (ZeroDivisionError, SyntaxError):
33
+ pass
34
+
35
+ try: # 例如: (a op (b op c)) op d
36
+ expr = f"({p_nums[0]}{p_ops[0]}({p_nums[1]}{p_ops[1]}{p_nums[2]})){p_ops[2]}{p_nums[3]}"
37
+ if abs(eval(expr) - 24) < 1e-6:
38
+ return expr
39
+ except (ZeroDivisionError, SyntaxError):
40
+ pass
41
+
42
+ try: # 形式: a op (b op c op d) (需要进一步细分括号)
43
+ expr = f"{p_nums[0]}{p_ops[0]}(({p_nums[1]}{p_ops[1]}{p_nums[2]}){p_ops[2]}{p_nums[3]})"
44
+ if abs(eval(expr) - 24) < 1e-6:
45
+ return expr
46
+ except (ZeroDivisionError, SyntaxError):
47
+ pass
48
+
49
+ try: # 例如: a op (b op (c op d))
50
+ expr = f"{p_nums[0]}{p_ops[0]}({p_nums[1]}{p_ops[1]}({p_nums[2]}{p_ops[2]}{p_nums[3]}))"
51
+ if abs(eval(expr) - 24) < 1e-6:
52
+ return expr
53
+ except (ZeroDivisionError, SyntaxError):
54
+ pass
55
+ return None