# permutations #return a string with chars i and j swapped def swap_chars(s,i,j): if i > j: i,j = j,i if i == j: return s return s[:i] + s[j] + s[i+1:j] + s[i] + s[j+1:] ''' sp = " abcdefghijkl" print(swap_chars(sp,2,5)) # aecdbfghijkl print(swap_chars(sp,5,2)) # aecdbfghijkl print(swap_chars(sp,2,2)) # abcdefghijkl print(swap_chars(sp,2,3)) # acbdefghijkl ''' def perms_string(s,k,n, perms_list): if k == n: print(s[:n], end=" ") perms_list.append(s[:n]) else: for i in range(k,n): #for each I from k to N #L = list(s) #L[i],L[k] = L[k],L[i] #swap Ith with Kth #s = "".join(L) s = swap_chars(s,k,i) perms_string(s,k+1,n, perms_list) #recurse to find permutations from K+1 to N s = swap_chars(s,k,i) #L = list(s) #L[i],L[k] = L[k],L[i] #put it back #s = "".join(L) n = int(input("Input N: ")) #S = "abcdefghijklm" S = "".join([chr(97+i) for i in range(n)]) print(S) S_list = [] perms_string(S,0,n, S_list) print() print(S_list) #S_list = [] #perms2(S, S_list) def perms (PL, k, n): if k == n: print("".join(PL.L[:n]), end=" ") else: for i in range(k,n): #for each I from k to N PL.L[i],PL.L[k] = PL.L[k],PL.L[i] #swap with Kth perms(PL,k+1,n) #recurse to find permutations from K+1 to N PL.L[i],PL.L[k] = PL.L[k],PL.L[i] #put it back class P(): #dummy class to hold list L so to get pass-by-value def __init__(self,L): self.L = L ''' PL = P(['a','b','c','d','e','f','g','h','i','j','k','l','m']) print(type(PL)) print(type(PL.L)) ''' PL = P([chr(97+i) for i in range(n)]) perms(PL,0,n) print()