Skip to content

Instantly share code, notes, and snippets.

@adamashton
Created May 10, 2012 22:05
Show Gist options
  • Save adamashton/2656187 to your computer and use it in GitHub Desktop.
Save adamashton/2656187 to your computer and use it in GitHub Desktop.
Countdown Solver Unfinished
import itertools
def _solve(target, numbers):
#print 'Solving T=' + str(target) + ': ' + str(numbers)
# base case
if target in numbers:
# solved.
print target,
return True
elif len(numbers) <= 1:
# the target doesn't equal the number. Failed
return False
# use the first number of the list
number = numbers[0]
newNumbers = numbers[1:]
# try 'minus'
newTarget = target + number
if _solve(newTarget, newNumbers):
# solved, working backwards we want the inverse
print number,
print '-',
return True
# 'add'
newTarget = target - number
if _solve(newTarget, newNumbers):
print number,
print '+',
return True
if target % number == 0:
# try product
newTarget = target/number
if _solve(newTarget, newNumbers):
print number,
print '*',
return True
newTarget = target*number
if _solve(newTarget, newNumbers):
print number,
print '/',
return True
def solve(target, numbers, solve_all=False):
solved = False
for n in xrange(len(numbers)):
if solved and not solve_all:
break
for perm in itertools.permutations(numbers, n):
if solved and not solve_all:
break;
if _solve(target, perm):
print '=',
print target
solved = True
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment