Instantly share code, notes, and snippets.

Embed
What would you like to do?
Trimmed down 24 solver
def solve(n, nums, solveStr='x'):
''' Play 24 with nums 1,3,4,6 like so:
>>> solve(24, [1,3,4,6])
(6/(1-(3/4))) '''
n = float(n)
solved = False
if len(nums) == 1:
return (solveStr.replace('x', str(int(n))) if n == float(nums[0]) else False)
for num in [float(x) for x in nums]:
possibles = [ ( n-num , '+', False),
( num-n , '-', True),
( n+num , '-', False),
( n*num , '/', False),
( (n/num if num != 0 else 100000) , '*', True),
( (num/n if n != 0 else 100000) , '/', True)]
wo = [x for x in nums]
wo.remove(num)
for possible in possibles:
if possible[2]:
solved = solved or solve(possible[0], wo, solveStr.replace('x', '(' + str(int(num)) + possible[1] + 'x)'))
else:
solved = solved or solve(possible[0], wo, solveStr.replace('x', '(x' + possible[1] + str(int(num)) + ')'))
return solved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment