diff --git a/SwichGIT/Doc/Algorithme/FonctionAnalyseEmpiler.md b/SwichGIT/Doc/Algorithme/FonctionAnalyseEmpiler.md index 5e460aa..e7d5ded 100644 --- a/SwichGIT/Doc/Algorithme/FonctionAnalyseEmpiler.md +++ b/SwichGIT/Doc/Algorithme/FonctionAnalyseEmpiler.md @@ -13,6 +13,7 @@ --- ### ENUMERATION TYPEFIGURE ### //Tailles de Figure possibles sur des cartes + - **Petit** : petit - **Moyen** : moyen - **Grand** : grand @@ -32,11 +33,11 @@ ###STRUCTURE CARTE ### ### Attributs ### -- **Carte.indentifiant** : entier +- **Carte.identifiant** : entier - **Carte.row** : eniter // Nombre de lignes sur la carte - **Carte.column** : entier // Nombre de colonnes sur la carte - **Carte.HTML**: code HTML -- **Carte.Matrice**: entier[n][k]; +- **Carte.Matrice**: entier[row][column]; - **Carte.lesFigures** : Figures [ ] ### Méthodes ### - **Carte.carteVerticale** : obtient sa carte verticalement symétrique. @@ -45,6 +46,7 @@ --- ### STRUCTURE CODE ### +// Permet de gérer les informations sur des assemblages de cartes ### Attributs ### - **Code.code** : entier //Nombre de liaisons @@ -62,23 +64,23 @@ - **CarteFille** : Carte sujette, "pièce" à comparer sur le support. -**Objectif** : Determine le nombre de liaison possible entre CarteMere et CarteFille. +**Objectif** : Determine le nombre de liaison possible entre les deux cartes envoyées en paramètre -**Sortie** : entier,Carte +**Sortie** : Code **Sortie Possible :** -- **-1,CarteMere** : L'assemblage est impossible. +- new Code(**-1,CarteMere**) : L'assemblage est impossible. -- **nbliaisons,CarteMere** : L'assemblage est possible avec un certain nombre de liaisons entre les cartes. +- new Code(**nbliaisons,CarteMere**) : L'assemblage est possible avec un certain nombre de liaisons entre les deux cartes. ### COMMENT FAIRE ### -- Pour chaque **Figure** contenu dans **CarteFille.lesFigures** - - On regarde chaque **Figure** contenu dans **CarteMere.lesFigures** - - Si des figures sont aux mêmes endroits, de même **forme** et de **type** différents, on incrémente le nombre de liaisons. - - Si des figures sont aux mêmes endroits mais que les **Types** sont identiques ou que les **Forme** sont différentes, le nombre de liaisons vaut -1 et on retourne le résultat dans ce cas. -- A la fin de la comparaison des **Figures**. On fait la mise à jour de **CarteMere** en faisant la somme des deux cartes puis on retourne le résultat avec le nombre de liaison. +- Pour chaque **Figure** contenu dans le second paramètre de la fonction (**CarteFille.lesFigures**) : + - On regarde chaque **Figure** contenu dans le premier parametre (**CarteMere.lesFigures**) puis on vérifie ces situations : + - Si deux figures sont aux mêmes endroits, de même **forme** et de **type** différents. Dans ce cas, on incrémente le nombre de liaisons. + - Si des figures sont aux mêmes endroits mais que les **Types** sont identiques ou que les **Forme** sont différentes. Dans ce cas, il est impossible d'assembler les deux **Cartes**, le nombre de liaisons vaut alors -1 et on retourne le résultat. +- A la fin de la comparaison des **Figures**. On fait la mise à jour du premier paramètre (**CarteMere**) en faisant la fusion des deux **Cartes** puis on retourne le résultat avec le nombre de liaison dans une nouvelle structure **Code**. --- @@ -101,11 +103,11 @@ - On regarde chaque **Figure** contenu dans **CarteMere.lesFigures** - Si l'une des Figures de **CarteFille** est absente de **CarteMere** on l'ajoute à la liste **CarteMere.lesFigures**. - Sinon on fait rien -- Une fois toutes les figures mises à jour dans **CarteMere.lesFigures**, **CarteMere.Matrice** est aussi mise à jour en faisant apparaitre les figures ainsi que les types par le biais de somme de puissance de 2. +- Une fois toutes les **figures** mises à jour dans **CarteMere.lesFigures**, **CarteMere.Matrice** est aussi mise à jour par le biais de somme de puissance de 2 en fonction des **types** de **Figures**. --- -Dans une Matrice si on a : +Dans une Matrice si nous avons une somme de puissance de 2 dans une cellule, nous sommes capable de déterminer quels types de figures sont présent dans celle-ci : - 1 -> Petit - 2 -> Moyen @@ -134,14 +136,14 @@ Dans une Matrice si on a : ### COMMENT FAIRE ### -- On supprime la tête de liste de **TasDeCarte** qui est égale à **CarteMere**. -- Si **TasDeCarte** est maintenant vide on retourne un **Code** avec **Code.code** = 0 et **Code.Carte** = **CarteMere**. - -Sinon on continue -- On appelle la même fonction **Assemblage** en envoyant la liste **TasDeCarte** et en testant avec toutes les variantes de rotation de la tête de **TasDeCarte**. -- Une fois toutes les listes de **Code** retournées par ces appelles de fonctions et récupérées dans une seule : - - Pour chaque **Code** de la liste : - - Si **Code.code** est différent de -1, on compare **Code.Carte** et **CarteMere**. Puis on ajoute le nombre de liaison à **Code.code**. -- On retourne la liste de **Code** mise à jour. +- On supprime la tête de liste envoyée en paramètre qui, au début de cette fonction, est identique au second paramètre de la fonction (**CarteMere**). +- Si cette liste, après la suppression de sa tête, est maintenant vide, on retourne une structure **Code** avec pour attribut **Code.code** = 0 et **Code.Carte** = **CarteMere**. + -Sinon on continue la fonction +- On appelle récursivement cette fonction (**Assemblage**) en envoyant en premier paramètre la nouvelle liste de **Carte**, et en second parametre, toutes les variantes (rotations) possible de la **Carte** en tête de cette même liste. +- Une fois tout les résultats de ces fonctions récupérés dans une seule liste: + - Pour chaque index de cette liste : + - Si nous sommes notifiés via la structure **Code** présente à cet index que l'on peut assembler les cartes, alors on compare la **Carte** et **CarteMere**. Puis on ajoute le nombre de liaison entre elles. +- On retourne la liste de résultats mise à jour. ---