# 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)