diff --git a/src/Ex2.py b/src/Ex2.py index 175c9ff..d0a544b 100644 --- a/src/Ex2.py +++ b/src/Ex2.py @@ -2,6 +2,7 @@ """ Nom/Prénom: Heredero/Louis Explications: + Tout d'abord, le réseau de routes et d'intersections peut être représenté par un graphe, dans lequel les interséctions sont les nœuds et les routes les arêtes. diff --git a/src/Ex4.py b/src/Ex4.py new file mode 100644 index 0000000..eeb59df --- /dev/null +++ b/src/Ex4.py @@ -0,0 +1,42 @@ + +""" +Nom/Prénom: Heredero/Louis +Explications: + +Une approche pour résoudre ce problème grâce à la programmation dynamique consiste +à se représenter les différentes séquences comme un arbre de décisions, où chaque nœud +représente une séquence, et chaque arête un coup supplémentaire +On peut alors parcourir l'arbre en profondeur (DFS) jusqu'à trouver une séquence +de longueur N et de valeur H (en élaguant les branches dépassant H ou N) +On peut également mémoiser un certain nombre de valeurs : en effet, pour une même +combinaison N, C, H, le résultat sera toujours le même. Cela optimise donc grandement +le calcul récursif puisque cela évite de calculer les états partagés (sous-branches +identiques) +""" + +mem: dict[tuple[int, int, int], int] = {} + +def computeNbrOfDifferentSequences(N: int, C: int, H: int) -> int: + if N == 0: + if H == 0: + return 1 + return 0 + + if H < 0: + return 0 + + key: tuple[int, int, int] = (N, C, H) + if key in mem: + return mem[key] + + total: int = 0 + for c in range(1, C + 1): + total += computeNbrOfDifferentSequences(N - 1, C, H - c) + + mem[key] = total + return total + + +if __name__ == '__main__': + print(computeNbrOfDifferentSequences(1, 6, 3) == 1) + print(computeNbrOfDifferentSequences(2, 6, 7) == 6) diff --git a/tests/test_ex4.py b/tests/test_ex4.py index b24a888..9de1abc 100644 --- a/tests/test_ex4.py +++ b/tests/test_ex4.py @@ -1,8 +1,21 @@ import unittest +from Ex4 import computeNbrOfDifferentSequences + + class MyTestCase(unittest.TestCase): def test_simple1(self): - pass + self.assertEqual( + computeNbrOfDifferentSequences(1, 6, 3), + 1 + ) + + def test_simple2(self): + self.assertEqual( + computeNbrOfDifferentSequences(2, 6, 7), + 6 + ) + if __name__ == '__main__': unittest.main()