URL: https://linuxfr.org/forums/programmationautre/posts/algorithme-permutation Title: Algorithme : permutation Authors: chimrod Date: 2014年06月25日T21:29:06+02:00 License: CC By-SA Tags: Score: 2> Le besoin pressant d'un univers logique et cohérent est profondément ancré dans l'inconscient humain. Mais l'univers réel est toujours à un pas au-delà de la logique. Je me suis pris la tête aujourd'hui avec un collègue sur un calcul tout simple ; Imaginons que nous ayons une feuille, avec 4 bord : ```c #define HAUT = 0; #define DROITE = 1; #define BAS = 2; #define GAUCHE = 3; ``` et un tableau avec des valeurs pour chaque bord : ```c int marges[4]; ``` il est facile de déterminer la marge à charger si la page a été tournée : ```c int getNewIndice(int angle, int indice) { // renommé en getNewIndice suite à remarque en commentaire switch (angle) { case 90: return (indice + 1) % 4; case 180: return (indice + 2) % 4; case 270: return (indice + 3) % 4; default: return indice; } } ``` Ça marche parce que les données sont ordonnée dans l'ordre de rotation. Sauf que dans notre cas, le tableau était construit avec les indices suivants : ```c #define HAUT = 0; #define BAS = 1; #define GAUCHE = 2; #define DROITE = 3; ``` il va de soit que ces valeurs sont définies et ne peuvent pas être changées. On a fini en énumérant les 3 cas possibles de rotation, et mettant dans le code les 3 combinaisons possibles, ce qui marche dans ce cas assez simple. Pourtant, je me demande s'il y a une manière simple de calculer l'indice à charger. Je pense qu'il doit s'agit d'une histoire de permutation, mais je ne vois pas trop l'algorithme qui pourrait faire ça. Je viens donc solliciter vos avis, si quelqu'un a une idée là dessus. (J'ai donné l'exemple en C, mais n'importe quel langage fera l'affaire)