- Code cleanup.
- Removed the need for local temp files.
This commit is contained in:
@@ -4,18 +4,41 @@
|
||||
# elements of the list l. The resulting lists (of length n) are passed
|
||||
# to the function f.
|
||||
|
||||
def tuplesDo (f,l,n):
|
||||
def tuplesDoRecurse (l,r):
|
||||
|
||||
# First some generic combinatorial stuff
|
||||
|
||||
def faculty_gen(n,k):
|
||||
if n <= k:
|
||||
return 1
|
||||
else:
|
||||
return n * faculty_gen(n-1,k)
|
||||
|
||||
def faculty(n):
|
||||
return faculty_gen(n,1)
|
||||
|
||||
def binomial(n,k):
|
||||
b1 = faculty_gen(n,k)
|
||||
b2 = faculty(n-k)
|
||||
return b1/b2
|
||||
|
||||
|
||||
# How many elements will there be?
|
||||
def tuples_count (l,n):
|
||||
return binomial(l,n)
|
||||
|
||||
# Generate those elements, and apply f
|
||||
def tuples_do (f,l,n):
|
||||
def recurse (l,r):
|
||||
if r and (len(r) == n):
|
||||
f(r)
|
||||
else:
|
||||
if l and (n > 0):
|
||||
# Larger size: we have options
|
||||
# Option 1: include first
|
||||
tuplesDoRecurse (l[1:], r + [l[0]])
|
||||
recurse (l[1:], r + [l[0]])
|
||||
# Option 2: exclude first
|
||||
tuplesDoRecurse (l[1:], r)
|
||||
recurse (l[1:], r)
|
||||
|
||||
tuplesDoRecurse (l,[])
|
||||
recurse (l,[])
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user