fork download
  1. def findexp(target, list, preceeding):
  2. if not list:
  3. if target == 0:
  4. return [preceeding]
  5. else:
  6. return []
  7. else:
  8. head, *tail = list
  9. r = []
  10. r.extend(findexp(target - head, tail, preceeding + [head]))
  11. if preceeding:
  12. r.extend(findexp(target + head, tail, preceeding + [-head]))
  13. *preceeding_init, preceeding_tail = preceeding
  14. blank_append = 10 * preceeding_tail + head
  15. new_target = target + preceeding_tail
  16. r.extend(findexp(new_target - blank_append, tail, preceeding_init + [blank_append]))
  17. return r
  18.  
  19. items = findexp(100, [1,2,3,4,5,6,7,8,9], [])
  20. #pretty print
  21. print(*map(lambda x: '%s. %s = %s' % (x[1], '+'.join(map(str,x[0])).replace('+-','-'), sum(x[0])), zip(items, range(1,len(items)+1))), sep='\n')
Success #stdin #stdout 0.03s 8688KB
stdin
Standard input is empty
stdout
1. 1+2+3-4+5+6+78+9 = 100
2. 1+2+34-5+67-8+9 = 100
3. 1+23-4+5+6+78-9 = 100
4. 1+23-4+56+7+8+9 = 100
5. 12+3+4+5-6-7+89 = 100
6. 12+3-4+5+67+8+9 = 100
7. 12-3-4+5-6+7+89 = 100
8. 123-4-5-6-7+8-9 = 100
9. 123-35+6+7+8-9 = 100