# Demonstration of generating combinations ( = pairs, triples, quadruples etc.)
# Although Python tries to be as affective as it can be,
# there are hard computational limits given by the sheer number 
# of items that are generated.


import time
from itertools import combinations

def demoCombinations( listLen, k_tuple ):
    L = list(range(listLen)) # just some mundane list

    t1 = time.time()
    tuples  = list( combinations(L, k_tuple) )
    t2 = time.time()
    if( len(tuples) <= 20 ): print( tuples )

    print( 'List length', listLen, '  '+str(k_tuple)+'-tuple,  combinations:', len(tuples) )
    print( 'time to generate', str(t2-t1)[:5] )
    print( '-' * 25 )

demoCombinations( 26, 13 ) # 10 millions items in about 1 sec

demoCombinations( 30, 15 ) #  15 seconds

exit()


demoCombinations( 100, 2 )
demoCombinations( 200, 2 )
demoCombinations( 300, 2 )
demoCombinations( 400, 2 )

demoCombinations( 100, 3 )
demoCombinations( 200, 3 )
demoCombinations( 300, 3 )
demoCombinations( 400, 3 )

demoCombinations( 100, 4 )
demoCombinations( 200, 4 )
demoCombinations( 300, 4 )
demoCombinations( 400, 4 )


