ICC-P Corrigé 5
Completion requirements
Exercice 1:
Exercice 2:
Exercice 3:
a = {1, 2, 3, 4, 5}
b = {4, 5, 6, 7, 8}
def my_union(a: set, b: set) -> set:
result = set()
for x in a:
result.add(x)
for x in b:
result.add(x)
return result
def my_intersection(a: set, b: set) -> set:
result = set()
for x in a:
if x in b:
result.add(x)
return result
def my_difference(a: set, b: set) -> set:
result = set()
for x in a:
if x not in b:
result.add(x)
return result
# verification against built-in operators
print(my_union(a, b) == a | b) # True
print(my_intersection(a, b) == a & b) # True
print(my_difference(a, b) == a - b) # True
text = [
"the", "cat", "sat", "on", "the", "mat",
"the", "cat", "sat", "on", "a", "mat"
]
def unique_words(words: list) -> set:
return set(words)
print(unique_words(text))
# {'a', 'cat', 'mat', 'on', 'sat', 'the'}
def is_subset(a: set, b: set) -> bool:
for x in a:
if x not in b:
return False
return True
print(is_subset({1, 2}, {1, 2, 3})) # True
print(is_subset({1, 6}, {1, 2, 3})) # False
print(is_subset({1, 2}, {1, 2})) # True
def my_equals(a: set, b: set) -> bool:
return is_subset(a, b) and is_subset(b, a)
print(my_equals({1, 2, 3}, {3, 1, 2})) # True
print(my_equals({1, 2, 3}, {1, 2})) # False
Exercice 2:
# on définit le type Matrix comme étant équivalent à une liste de liste de floats
Matrix = list[list[float]]
# on définit une matrice
m1: Matrix = [[1, 2, 3], [9, 8, 7]]
m2: Matrix = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
m3: Matrix = [[0, 2], [2, 0]]
m4: Matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 5, 7]]
m5: Matrix = [[1, 2, 3]]
m6: Matrix = [[1], [2], [3]]
def print_matrix(mat: Matrix) -> None:
print("[")
for row in mat:
print(" ", end="")
for val in row:
print(val, end="")
print(" ", end="")
print("")
print("]")
matrices = [m1, m2, m3, m4, m5, m6]
for m in matrices:
print_matrix(m)
def dim_m(mat: Matrix) -> int:
return len(mat)
def dim_n(mat: Matrix) -> int:
m = dim_m(mat)
if m == 0:
return 0
n = len(mat[0])
for i in range(1, m):
if len(mat[i]) != n:
return 0
return n
for m in matrices:
print(f"{dim_m(m)}x{dim_n(m)}")
def identity(size: int) -> Matrix:
mat: Matrix = []
for i in range(size):
line: list[float] = []
for j in range(size):
if i == j:
line.append(1)
else:
line.append(0)
mat.append(line)
return mat
# version raccourcie avec compréhension de liste (avancé)
def identity2(size: int) -> Matrix:
return [[int(i == j) for i in range(size)] for j in range(size)]
print(f"identity check: {identity(3) == m2}")
def empty(m: int, n: int) -> Matrix:
mat: Matrix = []
for _ in range(m):
line: list[float] = []
for _ in range(n):
line.append(0)
mat.append(line)
return mat
# version raccourcie avec compréhension de liste (avancé)
def empty2(m: int, n: int) -> Matrix:
return [[0 for _ in range(n)] for _ in range(m)]
def mult(mat1: Matrix, mat2: Matrix) -> Matrix:
mat1_m, mat1_n = dim_m(mat1), dim_n(mat1)
mat2_m, mat2_n = dim_m(mat2), dim_n(mat2)
if mat1_m == 0 or mat2_m == 0 or mat1_n != mat2_m:
return []
mat3 = empty(mat1_m, mat2_n)
for i in range(mat1_m):
for j in range(mat2_n):
sum = 0.0
for k in range(mat2_m):
sum += mat1[i][k] * mat2[k][j]
mat3[i][j] = sum
return mat3
print_matrix(mult(m1, m2))
print_matrix(mult(m5, identity(dim_n(m5))))
print_matrix(mult(identity(dim_m(m4)), m4))
Exercice 3:
numbers = sorted([1, 5, 6, 2, 8, 12, 5])
print(numbers)
def binary_search(values: list[int], item: int) -> int:
from_index = 0
to_index = len(values)
while True:
print(f"Searching {item} in {values[from_index:to_index]}")
if to_index - from_index <= 0:
return -1
middle_index = (from_index + to_index) // 2
if values[middle_index] == item:
return middle_index
else:
if item < values[middle_index]:
to_index = middle_index
else:
from_index = middle_index + 1
def binary_search_recursive(values: list[int], item: int,
from_index: int = 0,
to_index: int = -1) -> int:
if to_index == -1:
to_index = len(values)
print(f"Searching {item} in {values[from_index:to_index]}")
if to_index - from_index <= 0:
return -1
middle_index = (from_index + to_index) // 2
if values[middle_index] == item:
return middle_index
elif item < values[middle_index]:
return binary_search_recursive(values, item, from_index, middle_index)
else:
return binary_search_recursive(values, item, middle_index + 1, to_index)
for v in numbers:
print(binary_search(numbers, v))
print(binary_search(numbers, 3))
print(binary_search(numbers, 7))
print(binary_search(numbers, 42))
Last modified: Monday, 16 March 2026, 11:09 AM
