# Q2
def delta(p, q):
resultat = []
ip, iq = 0, 0
while ip < len(p) and iq < len(q):
a = p[ip]
b = q[iq]
if a < b:
resultat.append(a) ip += 1
if b < a:
resultat.append(b) iq += 1
if a == b:
ip += 1 iq += 1 if ip == len(p):
resultat += q[iq:]
else:
resultat += p[ip:]
return resultat
# Que pensez-vous de la version suivante ? def delta_rec(p, q):
if p == []:
return q if q == []:
return p a = p[0]
b = q[0]
if a == b:
return delta(p[1:], q[1:]) if a < b:
return [a] + delta(p[1:], q) if b < a:
return [b] + delta(p, q[1:])
u = [0,5,8,9,10,15,17,44,45]
v = [0,1,5,6,8,9,11,12,15,16,17,45]
print(delta(u, v)) print(delta_rec(u, v))
# Q4
def succ(p):
ind = 0
while ind < len(p) and p[ind] == ind:
ind += 1
return [ind] + p[ind:]
1
# Q5a
def test_incr(n):
L1 = []
for k in range(2**n - 1):
L2 = succ(L1)
print(delta(L1, L2)) L1 = L2
print(delta(L1, []))
# Q5b u(n+1) = 2*u(n) + 2
# Nombre : 2**(N+1) - 2
# 7a S(2**n - 1) = {n-1}
# 8a
def tabT(n):
if n == 0:
return []
else:
aux = tabT(n-1)
return aux + [n-1] + aux def test_gray(n):
print(tabT(n) + [n-1])
# 9a t(i) = 1 + min(S(i))
# 9b
def gray(p):
if len(p) % 2 == 0:
return delta(p, [0]) else:
return delta(p, [1 + p[0]])
# Q10
def test_sur(p, q):
if p == []:
return q if q == []:
return p a = p[0]
b = q[0]
if a == b:
return test_sur(p[1:], q[1:]) if a < b:
return [a] + test_sur(p[1:], q) if b < a:
return test_sur(p, q[1:]) + [b]
2