# exercice: guess
# default_start
def mystere(stock):
return stock.get("quantity") * stock.get("price")
# default_end
# test_start
print(mystere(Dict({"ref": 0, "name": "Boulon", "quantity": 10, "price": 1.99})))
print("C683AKRMaR")
print(mystere(Dict({"ref": 1, "name": "Ecrou", "quantity": 5, "price": 0.99})))
print("C683AKRMaR")
print(mystere(Dict({"ref": 2, "name": "Vis", "quantity": 20, "price": 0.10})))
# test_endDictionnaires - Exercices
1 Exercice 1
Difficulté :
Comprendre
Quelle est la sortie de ce programme ?
# exercice: show
# default_start
def mystere(stock): # stock = Dict({"ref": 0, "name": "Boulon", "quantity": 10, "price": 1.99})
return stock.get("quantity") * stock.get("price") # 10 * 1.99 = 19.9
print(mystere(Dict({"ref": 0, "name": "Boulon", "quantity": 10, "price": 1.99})))
# default_endAnalyser
Quelle est la complexité en temps de la fonction mystere ci-dessus ?
# exercice: show
# default_start
def mystere(stock):
return stock.get("quantity") * stock.get("price") # 1 retour + 1 multiplication
# T(n) = 2
# => O(1)
# default_endConcevoir
Écrire une fonction \(computeDistance(pointA, pointB)\) qui prend en paramètres deux points \(pointA\) et \(pointB\) sous forme de dictionnaires avec les clés “x” et “y”, et qui retourne la distance euclidienne entre ces deux points.
Exemple d’utilisation :
- \(computeDistance(Dict(\{\q{x}: 7, \q{y}: 2\}), Dict(\{\q{x}: -5, \q{y}: 9\}))\) retourne \(13.89\)
- \(computeDistance(Dict(\{\q{x}: -14, \q{y}: 15\}), Dict(\{\q{x}: 4,\q{y}: 0\}))\) retourne \(23.43\)
La distance euclidienne \(d\) entre deux points \(a\) et \(b\) dans un espace à deux dimensions (2D) est définie par la formule suivante: \[d(a, b) = \sqrt{{(x_a - x_b)}^2 + {(y_a - y_b)}^2}\] où \(x_a\) et \(y_a\) sont les coordonnées du point \(a\), et \(x_b\) et \(y_b\) sont les coordonnées du point \(b\).
Votre réponse
# exercice: design
# default_start
def computeDistance(pointA, pointB):
return None
# default_end
# test_start
print(computeDistance(Dict({"x": 7, "y": 2}), Dict({"x": -5, "y": 9})))
print("C683AKRMaR")
print(computeDistance(Dict({"x": -14, "y": 15}), Dict({"x": 4, "y": 0})))
print("C683AKRMaR")
print(computeDistance(Dict({"x": 3, "y": -7}), Dict({"x": -8, "y": 4})))
# test_end
# solution_start
def computeDistance(pointA, pointB):
x_diff = pointA.get("x") - pointB.get("x")
y_diff = pointA.get("y") - pointB.get("y")
return (x_diff * x_diff + y_diff * y_diff) ** 0.5
# T(n) = 7
# => O(1)
# solution_end2 Exercice 2
Difficulté :
Comprendre
# exercice: guess
# default_start
def mystere(arr):
result = 0
i = 0
while i < arr.size():
if arr[i].get("birthyear") < 1960:
result = result + 1
i = i + 1
return result
# default_end
# test_start
print(mystere(Array([
Dict({"firstname": "Nicolas", "lastname": "Sarkozy", "birthyear": 1955}),
Dict({"firstname": "Francois", "lastname": "Hollande", "birthyear": 1954}),
Dict({"firstname": "Emmanuel", "lastname": "Macron", "birthyear": 1977})
])))
print("C683AKRMaR")
print(mystere(Array([
Dict({"firstname": "Jacques", "lastname": "Chirac", "birthyear": 1932}),
Dict({"firstname": "Georges", "lastname": "Pompidou", "birthyear": 1911}),
Dict({"firstname": "Valery", "lastname": "Giscard", "birthyear": 1926}),
Dict({"firstname": "Emmanuel", "lastname": "Macron", "birthyear": 1977})
])))
print("C683AKRMaR")
print(mystere(Array([
Dict({"firstname": "Charles", "lastname": "De Gaulle", "birthyear": 1890}),
Dict({"firstname": "Albert", "lastname": "Lebrun", "birthyear": 1871}),
Dict({"firstname": "Paul", "lastname": "Dupont", "birthyear": 1960}),
Dict({"firstname": "Emmanuel", "lastname": "Macron", "birthyear": 1977})
])))
# test_end# exercice: show
# default_start
def mystere(arr):
# arr=Array([
# Dict({"firstname": "Nicolas", "lastname": "Sarkozy", "birthyear": 1955}),
# Dict({"firstname": "Francois", "lastname": "Hollande", "birthyear": 1954}),
# Dict({"firstname": "Emmanuel", "lastname": "Macron", "birthyear": 1977})
# ])
result = 0 # result = 0
i = 0 # i = 0
while i < arr.size(): # 0 < 3 1 < 3 2 < 3 3 < 3
if arr[i].get("birthyear") < 1960: # arr[0].birthyear < 1960 arr[1].birthyear < 1960 arr[2].birthyear < 1960
# 1955 < 1960 1954 < 1960 1977 < 1960
result = result + 1 # result = 1 result = 2
i = i + 1 # i = 1 i = 2 i = 3
return result # 2
print(mystere(Array([
Dict({"firstname": "Nicolas", "lastname": "Sarkozy", "birthyear": 1955}),
Dict({"firstname": "Francois", "lastname": "Hollande", "birthyear": 1954}),
Dict({"firstname": "Emmanuel", "lastname": "Macron", "birthyear": 1977})
])))
# default_endAnalyser
Quelle est la complexité en temps de la fonction mystere ci-dessus ?
# exercice: show
# default_start
def mystere(arr):
result = 0 # 1 affectation
i = 0 # 1 affectation
# Boucle:
# de i=0 jusqu'à i>=arr.size() par pas de 1
# => (arr.size() - 0)/ 1
# => arr.size() iterations
while i < arr.size(): # 1 comparaison
if arr[i].get("birthyear") < 1960: # 1 comparaison
result = result + 1 # 1 affectation + 1 addition
i = i + 1 # 1 affectation + 1 addition
return result # 1 retour
# n = arr.size()
# T(n) = 1 + 1 + n * (1 + 1 + 2 + 2) + 1
# = 6n + 3
# => O(n)
# default_endConcevoir
Écrire une fonction \(computeDistancePath(points)\) qui prend en paramètre un tableau de points \(points\) sous forme de dictionnaires avec les clés “x” et “y”, et qui retourne la distance totale de la suite de points.
Exemple d’utilisation :
- \(computeDistancePath(Array([Dict(\{\q{x}: 8, \q{y}: 2\}), Dict(\{\q{x}: -8, \q{y}: 14\}), Dict(\{\q{x}: 32, \q{y}: -1\})]))\) retourne \(62.72\)
- \(computeDistancePath(Array([Dict(\{\q{x}: 7, \q{y}: 2\}), Dict(\{\q{x}: -5, \q{y}: 9\}), Dict(\{\q{x}: -14, \q{y}: 15\}), Dict(\{\q{x}: -10, \q{y}: 5\})]))\) retourne \(35.47\)
- \(computeDistancePath(Array([Dict(\{\q{x}: -17, \q{y}: -25\}), Dict(\{\q{x}: -45, \q{y}: 90\}), Dict(\{\q{x}: 14, \q{y}: -15\}), Dict(\{\q{x}: 10, \q{y}: 50\}), Dict(\{\q{x}: -100, \q{y}: -50\})]))\) retourne \(452.58\)
Votre réponse
# exercice: design
# default_start
def computeDistancePath(points):
return None
# default_end
# test_start
print(computeDistancePath(Array([
Dict({"x": 8, "y": 2}),
Dict({"x": -8, "y": 14}),
Dict({"x": 32, "y": -1})
])))
print("C683AKRMaR")
print(computeDistancePath(Array([
Dict({"x": 7, "y": 2}),
Dict({"x": -5, "y": 9}),
Dict({"x": -14, "y": 15}),
Dict({"x": -10, "y": 5})
])))
print("C683AKRMaR")
print(computeDistancePath(Array([
Dict({"x": -17, "y": -25}),
Dict({"x": -45, "y": 90}),
Dict({"x": 14, "y": -15}),
Dict({"x": 10, "y": 50}),
Dict({"x": -100, "y": -50})
])))
# test_end
# solution_start
# OPTION 1
def computeDistancePath(points): # O(n)
distance_totale = 0
i = 0
while i < points.size() - 1:
pointA = points[i]
pointB = points[i+1]
x_diff = pointA.get("x") - pointB.get("x")
y_diff = pointA.get("y") - pointB.get("y")
distance = (x_diff * x_diff + y_diff * y_diff) ** 0.5
distance_totale = distance_totale + distance
i = i + 1
return distance_totale
# OPTION 2 (avec la fonction computeDistance)
def computeDistance(pointA, pointB): # O(1)
x_diff = pointA.get("x") - pointB.get("x")
y_diff = pointA.get("y") - pointB.get("y")
return (x_diff * x_diff + y_diff * y_diff) ** 0.5
def computeDistancePath(points): # O(n)
distance_totale = 0
i = 0
while i < points.size() - 1:
distance = computeDistance(points[i], points[i+1])
distance_totale = distance_totale + distance
i = i + 1
return distance_totale
# solution_end3 Exercice 3
Difficulté :
Comprendre
# exercice: guess
# default_start
def mystere(arr):
i = 0
total = 0
res = Dict({"total_cost": 0, "average_cost": 0.0})
while i < arr.size():
quantity = arr[i].get("quantity")
price = arr[i].get("price")
cost = quantity * price
total = total + cost
i = i + 1
res.set("total_cost", total)
avg = total / arr.size()
res.set("average_cost", avg)
return res
# default_end
# test_start
print(mystere(Array([
Dict({"item": "book", "price": 3, "quantity": 2}),
Dict({"item": "pen", "price": 1, "quantity": 5})
])))
print("C683AKRMaR")
print(mystere(Array([
Dict({"item": "apple", "price": 1, "quantity": 3}),
Dict({"item": "banana", "price": 1, "quantity": 1}),
Dict({"item": "pear", "price": 1, "quantity": 2}),
Dict({"item": "orange", "price": 2, "quantity": 1})
])))
# test_end# exercice: show
# default_start
def mystere(arr):
# arr = Array([
# Dict({"item": "book", "price": 3, "quantity": 2}),
# Dict({"item": "pen", "price": 1, "quantity": 5})
# ])
i = 0 # i = 0
total = 0 # total = 0
res = Dict({"total_cost": 0, "average_cost": 0.0})# res = Dict({"total_cost": 0, "average_cost": 0})
while i < arr.size(): # 0 < 2 1 < 2 2 < 2
quantity = arr[i].get("quantity") # quantity = 2 quantity = 5
price = arr[i].get("price") # price = 3 price = 1
cost = quantity * price # cost = 2 * 3 = 6 cost = 5 * 1 = 5
total = total + cost # total = 0 + 6 = 6 total = 6 + 5 = 11
i = i + 1 # i = 1 i = 2
res.set("total_cost", total) # res = Dict({"total_cost": 11, "average_cost": 0})
avg = total / arr.size() # avg = 11 / 2 = 5.5
res.set("average_cost", avg) # res = Dict({"total_cost": 11, "average_cost": 5.5})
return res # Dict({"total_cost": 11, "average_cost": 5.5})
# default_end
# test_start
print(mystere(Array([
Dict({"item": "book", "price": 3, "quantity": 2}),
Dict({"item": "pen", "price": 1, "quantity": 5})
])))
print("C683AKRMaR")
print(mystere(Array([
Dict({"item": "apple", "price": 1, "quantity": 3}),
Dict({"item": "banana", "price": 1, "quantity": 1}),
Dict({"item": "pear", "price": 1, "quantity": 2}),
Dict({"item": "orange", "price": 2, "quantity": 1})
])))
# test_endAnalyser
Quelle est la complexité en temps de la fonction mystere ci-dessus ?
# exercice: show
# default_start
def mystere(arr):
i = 0 # 1 affectation
total = 0 # 1 affectation
res = Dict({"total_cost": 0, "average_cost": 0.0}) # O(n) création d'un dictionnaire => 2 clés-valeurs (n=2) => O(1)
# Boucle:
# de i=0 jusqu'à i>=arr.size() par pas de 1
# => (arr.size() - 0)/ 1
# => arr.size() iterations
while i < arr.size(): # 1 comparaison
quantity = arr[i].get("quantity") # 1 affectation
price = arr[i].get("price") # 1 affectation
cost = quantity * price # 1 affectation + 1 multiplication
total = total + cost # 1 affectation + 1 addition
i = i + 1 # 1 affectation + 1 addition
res.set("total_cost", total) # 1 affectation
avg = total / arr.size() # 1 division
res.set("average_cost", avg) # 1 affectation
return res # 1 retour
# n = arr.size()
# T(n) = 1 + 1 + 1 + n * (1 + 1 + 1 + 2 + 2) + 1 + 1 + 1 + 1
# = 8n + 5
# => O(n)
# default_endConcevoir
Écrire une fonction \(computeMinimumDistance(points)\) qui prend en paramètre un tableau de points \(points\) sous forme de dictionnaires avec les clés “x” et “y”, et qui retourne la plus petite distance entre n’importe quel couple de points du tableau.
Exemple d’utilisation :
- \(computeMinimumDistance(Array([Dict(\{\q{x}: 8, \q{y}: 2\}), Dict(\{\q{x}: -8, \q{y}: 14\}), Dict(\{\q{x}: 32, \q{y}: -1\})]))\) retourne \(20.00\)
- \(computeMinimumDistance(Array([Dict(\{\q{x}: 7, \q{y}: 2\}), Dict(\{\q{x}: -5, \q{y}: 9\}), Dict(\{\q{x}: -14, \q{y}: 15\}), Dict(\{\q{x}: -10, \q{y}: 5\})]))\) retourne \(6.40\)
- \(computeMinimumDistance(Array([Dict(\{\q{x}: -17, \q{y}: -25\}), Dict(\{\q{x}: -45, \q{y}: 90\}), Dict(\{\q{x}: 14, \q{y}: -15\}), Dict(\{\q{x}: 10, \q{y}: 50\}), Dict(\{\q{x}: -100, \q{y}: -50\})]))\) retourne \(35.57\)
Votre réponse
# exercice: design
# default_start
def computeMinimumDistance(points):
return None
# default_end
# test_start
print(computeMinimumDistance(Array([
Dict({"x": 8, "y": 2}),
Dict({"x": -8, "y": 14}),
Dict({"x": 32, "y": -1})
])))
print("C683AKRMaR")
print(computeMinimumDistance(Array([
Dict({"x": 7, "y": 2}),
Dict({"x": -5, "y": 9}),
Dict({"x": -14, "y": 15}),
Dict({"x": -10, "y": 5})
])))
print("C683AKRMaR")
print(computeMinimumDistance(Array([
Dict({"x": -17, "y": -25}),
Dict({"x": -45, "y": 90}),
Dict({"x": 14, "y": -15}),
Dict({"x": 10, "y": 50}),
Dict({"x": -100, "y": -50})
])))
# test_end
# solution_start
# SOLUTION 1 => O(n²)
def computeMinimumDistance(points):
i = 0
distance_minimale = None
while i < points.size():
pointA = points[i]
j = i + 1
while j < points.size():
pointB = points[j]
x_diff = pointA.get("x") - pointB.get("x")
y_diff = pointA.get("y") - pointB.get("y")
distance = (x_diff * x_diff + y_diff * y_diff) ** 0.5
if distance_minimale == None or distance < distance_minimale:
distance_minimale = distance
j = j + 1
i = i + 1
return distance_minimale
# solution_end4 Exercice 4
Écrire une fonction \(generateSquareAsArrayOfPoints(side)\) qui prend en paramètres un entier positif \(side\) et retourne un tableau contenant des dictionnaires représentant des points avec les clés “x” et “y”. Le premier point dans le tableau correspond au sommet en bas à gauche du carré, suivi des autres points dans le sens horaire.
Exemple d’utilisation :
- \(generateSquareAsArrayOfPoints(2)\) retourne \(Array([Dict(\{\q{x}: 0, \q{y}: 0\}), Dict(\{\q{x}: 0, \q{y}: 2\}), Dict(\{\q{x}: 2, \q{y}: 2\}), Dict(\{\q{x}: 2, \q{y}: 0\})])\)
- \(generateSquareAsArrayOfPoints(4)\) retourne \(Array([Dict(\{\q{x}: 0, \q{y}: 0\}), Dict(\{\q{x}: 0, \q{y}: 4\}), Dict(\{\q{x}: 4, \q{y}: 4\}), Dict(\{\q{x}: 4, \q{y}: 0\})])\)
- \(generateSquareAsArrayOfPoints(7)\) retourne \(Array([Dict(\{\q{x}: 0, \q{y}: 0\}), Dict(\{\q{x}: 0, \q{y}: 7\}), Dict(\{\q{x}: 7, \q{y}: 7\}), Dict(\{\q{x}: 7, \q{y}: 0\})])\)
# exercice: design
# default_start
def generateSquareAsArrayOfPoints(side):
return None
# default_end
# test_start
print(generateSquareAsArrayOfPoints(4))
print("C683AKRMaR")
print(generateSquareAsArrayOfPoints(7))
print("C683AKRMaR")
print(generateSquareAsArrayOfPoints(15))
print("C683AKRMaR")
print(generateSquareAsArrayOfPoints(37))
# test_end
# solution_start
def generateSquareAsArrayOfPoints(side):
res = Array([Dict({"x": 0, "y": 0})] * 4)
res[1].set("y", side)
res[2].set("x", side)
res[2].set("y", side)
res[3].set("x", side)
return res
# solution_end5 Bonus
Écrire une fonction \(generatePointsFromArrays(xValues, yValues)\) qui prend en paramètres deux tableaux d’entiers \(xValues\) et \(yValues\) de même taille. La fonction retourne un tableau contenant des dictionnaires représentant des points avec les clés “x” et “y” correspondant à chaque couple de valeurs \((xValues_i,\; yValues_i)\).
Exemple d’utilisation :
- \(generatePointsFromArrays(Array([1, 2]), Array([3, 4]))\) retourne \(Array([Dict(\{\q{x}: 1, \q{y}: 3\}), Dict(\{\q{x}: 2, \q{y}: 4\})])\)
- \(generatePointsFromArrays(Array([-15, 35, -14]), Array([14, -34, 15]))\) retourne \(Array([Dict(\{\q{x}: -15, \q{y}: 14\}), Dict(\{\q{x}: 35, \q{y}: -34\}), Dict(\{\q{x}: -14, \q{y}: 15\})])\)
- \(generatePointsFromArrays(Array([13, 24, 35, 46]), Array([-14, -25, -36, -47]))\) retourne \(Array([Dict(\{\q{x}: 13, \q{y}: -14\}), Dict(\{\q{x}: 24, \q{y}: -25\}), Dict(\{\q{x}: 35, \q{y}: -36\}), Dict(\{\q{x}: 46, \q{y}: -47\})])\)
# exercice: design
# default_start
def generatePointsFromArrays(xValues, yValues):
return None
# default_end
# test_start
print(generatePointsFromArrays(
Array([1, 2]),
Array([3, 4]
)))
print("C683AKRMaR")
print(generatePointsFromArrays(
Array([-15, 35, -14]),
Array([14, -34, 15])
))
print("C683AKRMaR")
print(generatePointsFromArrays(
Array([13, 24, 35, 46]),
Array([-14, -25, -36, -47])
))
# test_end
# solution_start
def generatePointsFromArrays(xValues, yValues):
res = Array([Dict({"x":0, "y":0})] * xValues.size())
i = 0
while i < res.size():
res[i].set("x", xValues[i])
res[i].set("y", yValues[i])
i = i + 1
return res
# solution_end# default_start
print("Hello World!")
# default_end