Programma 1
# Pascal driehoek met eigen getallen
# invoer: [a1, a2, .., an]
# uitvoer: TRUE / FALSE, bij TRUE: max, bij FALSE: 0
# [1, 2, 3, 4] > 0
# [4, 1, 2, 6] > x
def Pascal(S):
errors = 0
ls = len(S)
T = []
U = []
V = []
for s in S:
T.append(s)
V.append(s)
for i in range(ls-1):
lt = ls - i - 1
for j in range(lt):
s = T[j] + T[j+1]
U.append(s)
if s in V:
errors += 1
else:
V.append(s)
T = U
U = []
#print(V)
if errors > 0:
return 0
#print(V)
return T[0]
S = [[4,1,2,7], [5,1,2,6], [7,2,1,4,6]]
for s in S:
print(s, Pascal(s))
Programma 2
# Poging 1
# Er wordt gebruik gemaakt van bovengenoemde procedure Pascal
import itertools
# afmeting 3
n = 3
m = 6
M = []
for mm in range(m):
M.append(mm+1)
for c in itertools.permutations(M,n):
p = Pascal(c)
if p > 0:
print(c, p)
Programma 3
# Poging 1, nu alleen resultaten die gelijk of beter dan voorafgaande
# resultaten zijn.
# Er wordt gebruik gemaakt van bovengenoemde procedure Pascal
import itertools
import time
for nn in range(5):
n = nn + 3
print("Afmeting", n)
m = 2 * n
M = []
minmax = 1000
t0 = time.process_time()
for mm in range(m):
M.append(mm+1)
for c in itertools.permutations(M,n):
p = Pascal(c)
if( p > 0) & (p <= minmax):
print(c, p)
minmax = p
t1 = time.process_time()
T = t1-t0
D = 1
while T < 1000:
T *= 10
D *= 10
TT = round(T)
print("Gebruikte tijd", TT/D)
print("Ready")
Programma 4
# Poging 2, er wordt vooraf berekend of het eindresultaat een verbetering is
# Er wordt gebruik gemaakt van bovengenoemde procedure Pascal
import itertools
import time
import sympy
def BerekenResultaat(S,n):
sumB = 0
for b in range(n):
sumB += B[b] * S[b]
return sumB
for nn in range(5):
B = []
n = nn + 3
for b in range(n):
B.append(sympy.binomial(n-1,b))
print("Afmeting", n)
m = 2 * n
M = []
minmax = 1000
t0 = time.process_time()
for mm in range(m):
M.append(mm+1)
for c in itertools.permutations(M,n):
b = BerekenResultaat(c,n)
if b <= minmax:
p = Pascal(c)
if p > 0:
print(c, p)
minmax = p
t1 = time.process_time()
T = t1-t0
D = 1
while T < 1000:
T *= 10
D *= 10
TT = round(T)
print("Gebruikte tijd", TT/D)
print("Ready")
Programma 5
# Poging 3, er wordt vooraf berekend of het eindresultaat een verbetering is
# Er wordt gebruik gemaakt van bovengenoemde procedure Pascal
import itertools
import time
import sympy
def BerekenResultaat(S,n):
sumB = 0
for b in range(n):
sumB += B[b] * S[b]
return sumB
RES = []
for nn in range(6):
B = []
n = nn + 3
hn = (n+1) // 2 - 1
for b in range(n):
B.append(sympy.binomial(n-1,b))
print("Afmeting", n)
m = 2 * n
M = []
minmax = 1000
t0 = time.process_time()
for mm in range(m):
M.append(mm+1)
for c in itertools.permutations(M,n):
errors = 0
if c[hn] < 4:
for i in range(hn):
if c[hn-i] > c[hn-i-1] + 2:
errors += 1
if errors == 0:
for i in range(n-hn-1):
#print(n, hn, i, hn+i, hn+i+1)
if c[hn+i] > c[hn+i+1] + 2:
errors += 1
if errors == 0:
b = BerekenResultaat(c,n)
if b <= minmax:
p = Pascal(c)
if p > 0:
print(c, p)
minmax = p
t1 = time.process_time()
RES.append(minmax)
T = t1-t0
D = 1
while T < 1000:
T *= 10
D *= 10
TT = round(T)
print("Gebruikte tijd", TT/D)
print("Optimale resultaten:", RES)
print("Ready")