This commit is contained in:
		
							
								
								
									
										67
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								README.md
									
									
									
									
									
								
							| @@ -12,24 +12,24 @@ Voici mes réponses pour l'examen 2025 d'_Algorithmes et Structures de données_ | ||||
| <table> | ||||
| <tr> | ||||
| <td><strong>But</strong></td> | ||||
| <td>...</td> | ||||
| <td>Compter le nombre de valeurs positives différentes ayant leur opposé dans une liste</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Input</strong></td> | ||||
| <td>...</td> | ||||
| <td>La liste des demi-touches (entiers relatifs non-nuls)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Output</strong></td> | ||||
| <td>...</td> | ||||
| <td>Le nombre de touches distinctes dont les valeurs positives et négatives sont dans la liste</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Signature</strong></td> | ||||
| <td> | ||||
|  | ||||
| ```python | ||||
| def function1( | ||||
|     *args | ||||
| ) -> Any: | ||||
| def countKey( | ||||
|     pieces: list[int] | ||||
| ) -> int: | ||||
| ``` | ||||
|  | ||||
| </td> | ||||
| @@ -46,24 +46,26 @@ def function1( | ||||
| <table> | ||||
| <tr> | ||||
| <td><strong>But</strong></td> | ||||
| <td>...</td> | ||||
| <td>Trouver le chemin le plus court entre deux points, en considérant que certaines routes ne sont praticables que de nuit/jour</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Input</strong></td> | ||||
| <td>...</td> | ||||
| <td>Nœud de départ (index), nœud d'arrivée (index) et liste des routes / arêtes (nœud 1, nœud 2, restriction)</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Output</strong></td> | ||||
| <td>...</td> | ||||
| <td>Liste des nœuds (index) à parcourir</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Signature</strong></td> | ||||
| <td> | ||||
|  | ||||
| ```python | ||||
| def function2( | ||||
|     *args | ||||
| ) -> Any: | ||||
| def findSafestPath( | ||||
|     start: int, | ||||
|     end: int, | ||||
|     intersections: list[tuple[int, int, int]] | ||||
| ) -> list[int]: | ||||
| ``` | ||||
|  | ||||
| </td> | ||||
| @@ -80,24 +82,25 @@ def function2( | ||||
| <table> | ||||
| <tr> | ||||
| <td><strong>But</strong></td> | ||||
| <td>...</td> | ||||
| <td>Trouver dans un réseau de console un sous-graphe connexe de taille donnée</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Input</strong></td> | ||||
| <td>...</td> | ||||
| <td>Taille n du sous-graphe recherché, liste des connexions</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Output</strong></td> | ||||
| <td>...</td> | ||||
| <td>Liste de n consoles toutes interconnectées</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Signature</strong></td> | ||||
| <td> | ||||
|  | ||||
| ```python | ||||
| def function3( | ||||
|     *args | ||||
| ) -> Any: | ||||
| def findTightlyLinkedConsoles( | ||||
|     n: int, | ||||
|     consoles: list[tuple[int, int]] | ||||
| ) -> list[int]: | ||||
| ``` | ||||
|  | ||||
| </td> | ||||
| @@ -114,24 +117,26 @@ def function3( | ||||
| <table> | ||||
| <tr> | ||||
| <td><strong>But</strong></td> | ||||
| <td>...</td> | ||||
| <td>Compter le nombre de séquences de N coups infligeant un total de H dégâts</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Input</strong></td> | ||||
| <td>...</td> | ||||
| <td>Nombre N de coups dans la séquence, nombre C de coups possibles (dégâts 1 à C inclus), total H de dégâts</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Output</strong></td> | ||||
| <td>...</td> | ||||
| <td>Nombre de séquences possibles</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Signature</strong></td> | ||||
| <td> | ||||
|  | ||||
| ```python | ||||
| def function4( | ||||
|     *args | ||||
| ) -> Any: | ||||
| def computeNbrOfDifferentSequences( | ||||
|     N: int, | ||||
|     C: int, | ||||
|     H: int | ||||
| ) -> int: | ||||
| ``` | ||||
|  | ||||
| </td> | ||||
| @@ -148,24 +153,26 @@ def function4( | ||||
| <table> | ||||
| <tr> | ||||
| <td><strong>But</strong></td> | ||||
| <td>...</td> | ||||
| <td>Trouver les placements de pièces Minitris formant un rectangle plein</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Input</strong></td> | ||||
| <td>...</td> | ||||
| <td>Largeur de la grille, longueur de la grille, liste des pièces à poser</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Output</strong></td> | ||||
| <td>...</td> | ||||
| <td>Liste des positions des pièces</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td><strong>Signature</strong></td> | ||||
| <td> | ||||
|  | ||||
| ```python | ||||
| def function5( | ||||
|     *args | ||||
| ) -> Any: | ||||
| def playMinitrisFastAndWell( | ||||
|     board_width: int, | ||||
|     board_height: int, | ||||
|     pieces: list[tuple[tuple[int,int], tuple[int,int]]] | ||||
| ) -> list[list[int, int]]: | ||||
| ``` | ||||
|  | ||||
| </td> | ||||
|   | ||||
| @@ -28,7 +28,7 @@ list = [] | ||||
| """ | ||||
|  | ||||
|  | ||||
| def countKey(pieces: list[int])->int: | ||||
| def countKey(pieces: list[int]) -> int: | ||||
|     pieces = sorted(pieces) | ||||
|     complete: int = 0 | ||||
|  | ||||
|   | ||||
| @@ -12,7 +12,7 @@ point d'arrivée, tel que les routes marquées 1 ne soient parcourues que de jou | ||||
| seulement de nuit (index impair). En plus des routes données, nous pouvons aussi | ||||
| rester sur un même nœud pour une nuit. | ||||
| Afin de bien gérer les différences d'états entre jour et nuit, nous pouvons intégrer le demi-jour | ||||
| associé à chaque visite de nœud. Ainsi, une même intersection peut avoir deux nœud: | ||||
| associé à chaque visite de nœud. Ainsi, une même intersection peut avoir deux nœuds : | ||||
| un pour une visite de jour, et un de nuit. | ||||
|  | ||||
| Pour résoudre ce problème, comme nous ne pouvons pas établir d'heuristique mesurant | ||||
| @@ -93,4 +93,4 @@ def findSafestPath(start: int, end: int, intersections: list[tuple[int, int, int | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     print(findSafestPath(0,2,[(0, 1, -1), (1, 2, 0)]) == [0, 0, 1, 2]) | ||||
|     print(findSafestPath(0, 5, [(0,1,0), (0,2,1), (2,1,-1), (1,3,-1), (2,4,-1), (3,5,1), (3,4,0), (4,5,-1)]) == [0, 1, 3, 5]) | ||||
|     print(findSafestPath(0, 5, [(0, 1, 0), (0, 2, 1), (2, 1, -1), (1, 3, -1), (2, 4, -1), (3, 5, 1), (3, 4, 0), (4, 5, -1)]) == [0, 1, 3, 5]) | ||||
|   | ||||
							
								
								
									
										14
									
								
								src/Ex3.py
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/Ex3.py
									
									
									
									
									
								
							| @@ -6,7 +6,7 @@ Explications: | ||||
| Comme indiqué dans la donnée de l'exercice, il s'agit ici de trouvé un sous-graphe | ||||
| connexe dans un graphe quelconque de consoles interconnectées | ||||
|  | ||||
| Pour ce faire nous pouvons procéder ainsi: | ||||
| Pour ce faire, nous pouvons procéder ainsi : | ||||
| Étape 1 : | ||||
| - Compter le nombre de voisins de chaque nœud (console) | ||||
| - Éliminer ceux ayant moins de voisins que la taille de sous-graphe recherché | ||||
| @@ -20,10 +20,10 @@ Pour ce faire nous pouvons procéder ainsi: | ||||
| Étape 2 : | ||||
| - Pour chaque nœud du graphe : | ||||
|   - Calculer l'ensemble des nœuds communs entre ses voisins (et lui-même), | ||||
|     et les voisins des ses voisins (et eux-mêmes)' | ||||
|     C'est-à-dire, si N1 et un nœuds et nb(N1) = {N2, N3, ...} est l'ensemble de ses voisins, | ||||
|     et les voisins de ses voisins (et eux-mêmes)' | ||||
|     C'est-à-dire, si N1 est un nœud et nb(N1) = {N2, N3, ...} est l'ensemble de ses voisins, | ||||
|     on cherche l'intersection de {N1} U nb(N1), {N2} U nb(N2), {N3} U nb(N3), etc. | ||||
|   - Si c'est ensemble contient au moins n éléments, il s'agit alors d'un sous-graphe connexe. | ||||
|   - Si cet ensemble contient au moins n éléments, il s'agit alors d'un sous-graphe connexe. | ||||
|     On peut ainsi en extraire les n premiers nœuds comme résultat | ||||
| """ | ||||
|  | ||||
| @@ -71,6 +71,6 @@ def findTightlyLinkedConsoles(n: int, consoles: list[tuple[int, int]]) -> list[i | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     print(findTightlyLinkedConsoles(3,[(0,1),(0,4),(2,1),(3,1),(4,2),(2,3)]) == [1,2,3]) | ||||
|     print(findTightlyLinkedConsoles(4,[(0,1),(0,4),(2,1),(3,1),(4,2),(2,3)]) == []) | ||||
|     print(findTightlyLinkedConsoles(4,[(0,1),(0,4),(2,1),(3,1),(4,2),(2,3),(1,4),(4,3)]) == [1,2,3,4]) | ||||
|     print(findTightlyLinkedConsoles(3, [(0, 1), (0, 4), (2, 1), (3, 1), (4, 2), (2, 3)]) == [1, 2, 3]) | ||||
|     print(findTightlyLinkedConsoles(4, [(0, 1), (0, 4), (2, 1), (3, 1), (4, 2), (2, 3)]) == []) | ||||
|     print(findTightlyLinkedConsoles(4, [(0, 1), (0, 4), (2, 1), (3, 1), (4, 2), (2, 3), (1, 4), (4, 3)]) == [1, 2, 3, 4]) | ||||
|   | ||||
| @@ -14,7 +14,7 @@ le calcul récursif puisque cela évite de calculer les états partagés (sous-b | ||||
| identiques) | ||||
|  | ||||
| Bonus : | ||||
| Nous cherchons la valeur N la plus petite telle que: | ||||
| Nous cherchons la valeur N la plus petite telle que : | ||||
|   `computeNbrOfDifferentSequences(N, 5, 100) > 2^16` | ||||
| """ | ||||
|  | ||||
| @@ -72,4 +72,4 @@ def bonus(): | ||||
| if __name__ == '__main__': | ||||
|     print(computeNbrOfDifferentSequences(1, 6, 3) == 1) | ||||
|     print(computeNbrOfDifferentSequences(2, 6, 7) == 6) | ||||
|     print(bonus()) | ||||
|     #print(bonus()) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user