Programmatuur bij Drie op een Rij
# Eerste programma # invoer is een rij van getallen, # uitvoer is maximum en de gesorteerde rij sommen, indien de sommen allen verschillen # Er wordt gebruik gemaakt van de functie MaxSommen en VerschilSommen # MaxSommen bepaalt het maximum van de sommen def MaxSommen(S): ls = len(S) m = 0 for i in range(0,ls-2): som = S[i] + S[i+1] + S[i+2] if som > m: m = som som = S[0] + S[ls-2] + S[ls-1] if som > m: m = som som = S[0] + S[1] + S[ls-1] if som > m: m = som return m def VerschilSommen(S): ls = len(S) Sommen = [] for i in range(0,ls-2): Sommen.append(S[i] + S[i+1] + S[i+2]) Sommen.append(S[0] + S[ls-2] + S[ls-1]) Sommen.append(S[0] + S[1] + S[ls-1]) Sommen.sort() ok = 0 for i in range(0,ls-2): if Sommen[i] == Sommen[i+1]: ok += 1 if ok == 0: return Sommen else: return [] print(MaxSommen([1,2,3,4,5])) print(VerschilSommen([1,2,3,4,5]))
# Tweede programma: Het doorlopen van n! mogelijkheden # bron: https://www.geeksforgeeks.org/permutation-and-combination-in-python/ # A Python program to print all permutations using library function # hierboven staan de twee procedures die worden gebruikt. import time from itertools import permutations # Get all permutations of [1, 2, 3, ..., n] minN = 4 # kleinste waarde voor n maxN = 11 # grootste waarde voor n MINMAX = [6] # lijst van minmax vanaf 3 MINMAXCNT = [1] # lijst van aantallen oplossingen vanaf 3 (minmax) VSOMMENCNT = [1] # lijst van aantallen oplossingen vanaf 3 (vsommen) for nn in range(maxN - minN + 1): n = nn + minN perms = permutations(range(1,n)) # hiermee worden alle permutaties van 1 .. n-1 gemaakt # print("aantal elementen:", n) # Print the obtained permutations t0 = time.process_time() minmax = 3*n # minimum van maximum vsommen = 2*n # verschil van grootste en kleinste van de verschillende sommen minmaxcnt = 0 # aantal oplossingen bij minmax vsommencnt = 0 # aantal oplossingen bij vsommen VBmtot = [] # voorbeeld bij minmax VBvtot = [] # voorbeeld bij vsommen ResSommen = [] # resultaat van uitkomst van vsommen (gesorteerd) for perm in list(perms): # we gaan alle permutaties stuk voor stuk bekijken if perm[0] < perm[n-2]: # de helft van de permutaties kunnen we overslaan L = list(perm) L.append(n) # we voegen uiteindelijk n toe m = MaxSommen(L) # procedure uitvoeren v = VerschilSommen(L) # procedure uitvoeren if m < minmax: # een beter resultaat VBmtot = L # een nieuw voorbeeld minmax = m # minmax aanpassen minmaxcnt = 0 # aantal oplossingen resetten if m == minmax: # bij een gelijk resultaat minmaxcnt += 1 # het aantal oplossingen verhogen met 1 if len(v) > 0: # als len(v) == 0, dan zijn niet alle sommen verschil.. vmin = v[0] vmax = v[n-1] vv = vmax-vmin # verschil van grootste en kleinste verschil if vv < vsommen: # een beter resultaat VBvtot = L # een nieuw voorbeeld vsommen = vv # vsommen aanpassen ResSommen = v # we bewaren de verschillende sommen vsommencnt = 0 # aantal oplossingen resetten if vv == vsommen: vsommencnt += 1 # aantal oplossingen verhogen met 1 t1 = time.process_time() MINMAX.append(minmax) # Toevoegen van minmax in de lijst van oplossingen MINMAXCNT.append(minmaxcnt) # Toevoegen van minmaxcnt in de lijst van oplossingen VSOMMENCNT.append(vsommencnt) # Toevoegen van vsommencnt in de lijst van oplossingen print(n, ": minmax:", minmax, ", verschillende sommen:", ResSommen) print(" aantal oplossingen minmax:", minmaxcnt, "voorbeeld:", VBmtot) print(" aantal oplossingen sommen:", vsommencnt, "voorbeeld:", VBvtot) T = t1-t0 D = 1 while T < 1000: T *= 10 D *= 10 TT = round(T) print(" Gebruikte tijd", TT/D) print("minmax", MINMAX) print("minmax aantallen", MINMAXCNT) print("sommen aantallen", VSOMMENCNT)