Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from functools import reduce
- import math
- def listtotal(xs):
- if len(xs) == 0:
- return 0
- else:
- return reduce(lambda x,y: x + y, xs)
- def reversecopy(xs):
- output = []
- for i in xs:
- output.insert(0,i)
- return output
- def pilesort(n,p,s): #splits [1,n] into p subsets, each summing to s.
- output = []
- numbers = list(range(1,n+1))
- templist = []
- if (s*p) == int(n*(n+1)/2): #if it even makes sense to try doing this
- while len(output) < p:
- templist = []
- while not listtotal(templist) == s:
- for i in reversecopy(list(range(0,len(numbers)))):
- if listtotal(templist) + numbers[i] <= s:
- templist.append(numbers.pop(i))
- output.append(templist)
- else:
- return "Error!"
- return output
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement