Permutationer/Kombinationer med och utan återläggning
import itertools as it
import math
def perm_comb_print(a, r: int, typ: str, replacement: bool):
n = len(a)
if typ == 'perm' and replacement == True: #Permutationer med återläggning (med hänsyn till ordningsföljd), ex v kan innehålla både (1, 2) och (2, 1)
perm_a = list(it.product(a, repeat=r))
for i in range(n ** r):
print(perm_a[i])
print(f'Number of permutations with replacement = {len(perm_a)}') #print(n ** r)
elif typ == 'perm' and replacement == False: #Permutationer utan återläggning (med hänsyn till ordningsföljd)
perm_a = list(it.permutations(a, r))
for i in range(math.perm(n, r)):
print(perm_a[i])
print(f'Number of permutations with no replacement = {len(perm_a)}') #print(math.perm(n, r))
elif typ == 'comb' and replacement == True: #Kombinationer med återläggning (utan hänsyn till ordningsföljd, ex v kan inte innehålla både (1, 2) och (2, 1)
comb_a = list(it.combinations_with_replacement(a, r))
for i in range(math.comb(n+r-1, r)):
print(comb_a[i])
print(f'Number of combinations with replacement = {len(comb_a)}') #print(math.comb(n+r-1, r))
elif typ == 'comb' and replacement == False: #Kombinationer utan återläggning (utan hänsyn till ordningsföljd)
comb_a = list(it.combinations(a, r))
for i in range(math.comb(n, r)):
print(comb_a[i])
print(f'Number of combinations with no replacement = {len(comb_a)}') #print(math.comb(n, r))
mylist = ['A', 'B', 'C']
pick = 2
perm_comb_print(mylist, pick, typ='perm', replacement=True)
perm_comb_print(mylist, pick, typ='perm', replacement=False)
perm_comb_print(mylist, pick, typ='comb', replacement=True)
perm_comb_print(mylist, pick, typ='comb', replacement=False)