Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
zmx0142857
GitHub Repository: zmx0142857/mini-games
Path: blob/master/py/24points_solver.py
363 views
1
from itertools import product, permutations
2
3
add = lambda x, y: x + y
4
sub = lambda x, y: x - y
5
mul = lambda x, y: x * y
6
div = lambda x, y: float('nan') if y == 0 else x / y
7
ops = [(add, '+'), (sub, '-'), (mul, '*'), (div, '/')]
8
nums = [1., 3., 4., 6.]
9
10
class Node:
11
def __init__(self, op, left, right):
12
self.op = op
13
self.left = left
14
self.right = right
15
16
def __str__(self):
17
return '(%s %s %s)' % (str(self.left), self.op[1], str(self.right))
18
19
def __float__(self):
20
return self.op[0](float(self.left), float(self.right))
21
22
def test(self):
23
epsi = 1e-6
24
if abs(float(self) - 24) < epsi:
25
print(str(self))
26
27
for a, b, c, d in permutations(nums):
28
for f, g, h in product(ops, repeat=3):
29
Node(f, Node(g, a, b), Node(h, c, d)).test()
30
Node(f, Node(g, Node(h, a, b), c), d).test()
31
Node(f, Node(g, a, Node(h, b, c)), d).test()
32
Node(f, a, Node(g, b, Node(h, c, d))).test()
33
Node(f, a, Node(g, Node(h, b, c), d)).test()
34
35