fork(8) download
  1. import itertools
  2. import math
  3.  
  4. MAX = 17
  5.  
  6. def is_sqare(x):
  7. y = int(round(math.sqrt(x)))
  8. return x == y*y
  9.  
  10. sqsum = lambda s: is_sqare(sum(s))
  11. pairs = filter(sqsum, itertools.combinations(range(1,MAX+1),2))
  12. pairs=pairs+[(b,a) for (a,b) in pairs]
  13.  
  14. m = {}
  15.  
  16. for (a,b) in pairs:
  17. l = m.get(a) or []
  18. m[a] = l + [b]
  19.  
  20. def getNext(l,e):
  21. if len(l) >= 17:
  22. print(l)
  23. return
  24. for n in m[e]:
  25. if n not in l:
  26. getNext(l+[n],n)
  27.  
  28. for a in range(1,MAX+1):
  29. getNext([], a)
  30.  
Success #stdin #stdout 0.02s 9016KB
stdin
Standard input is empty
stdout
[17, 8, 1, 15, 10, 6, 3, 13, 12, 4, 5, 11, 14, 2, 7, 9, 16]
[16, 9, 7, 2, 14, 11, 5, 4, 12, 13, 3, 6, 10, 15, 1, 8, 17]