Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import collections
- import itertools
- import sys
- import timeit
- def filtered_combi(n, r):
- def good(combo):
- return not any(combo[i]+1 == combo[i+1] for i in range(len(combo)-1))
- yield from filter(good, itertools.combinations(range(1, n+1), r))
- def non_consecutive_combinator(rnge, r, prev=[]):
- if r == 0:
- yield prev
- else:
- for i, item in enumerate(rnge):
- for next_comb in non_consecutive_combinator(rnge[i+2:], r-1, prev+[item]):
- yield next_comb
- def recursive_combi(n, r):
- yield from non_consecutive_combinator(range(1, n+1), r)
- n0, n1, r0, r1 = map(int, sys.argv[1:])
- for n in range(n0, n1):
- for r in range(r0, r1):
- for f in filtered_combi, recursive_combi:
- print(n, r, f.__name__[:4], end=' ')
- x = len(list(f(n, r)))
- print(x, end=' ')
- if x:
- t = timeit.timeit(lambda: collections.deque(f(n, r), maxlen=0), number=10000//n) / x
- print(t, end=' ')
- print()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement