theshockwave I work at a firm named Koslow | Code :
- #include <stdlib.h>
- #include <stdio.h>
- int GetShortestDirIncrement( unsigned char from, unsigned char to )
- {
- const int possibleIncrements[] = {1, -1};
- int incrementId = from < to ? 0 : 1;
- if ( abs((int)to - (int)from) > 127 )
- {
- incrementId ^= 1;
- }
- return possibleIncrements[ incrementId ];
- }
- void PrintExample( unsigned char from, unsigned char to )
- {
- int increment = GetShortestDirIncrement( from, to );
- printf( "From %03d - To %03d : increment = %d\n", from, to, increment );
- }
- int main( int argc, char** argv )
- {
- PrintExample( 16, 50 ); // From 016 - To 050 : increment = 1
- PrintExample( 16, 250 ); // From 016 - To 250 : increment = -1
- PrintExample( 50, 16 ); // From 050 - To 016 : increment = -1
- PrintExample( 250, 16 ); // From 250 - To 016 : increment = 1
- return 0;
- }
| Pour expliquer brièvement, tu as 4 cas basés sur deux critères. 1/ ta valeur destination est supérieure à ta valeur de départ ou non 2/ ta distance entre les deux est plus grande que la moitié de ton intervalle J'ai choisi de partir sur l'idée que le 2/ va seulement consister à inverser la direction du résultat trouvé en 1/. Donc sans surprise, je teste d'abord mon cas 1 pour trouver une direction, ensuite je teste mon cas 2/ pour l'inverser. Plutôt que de travaille directement sur l'incrément et de le retourner avec des multiplications par -1, j'ai préféré passer par un tableau et changer l'index entre les deux entrées possibles. A toi de voir ce qui te convient le mieux et si ton compilateur produit du meilleur code avec une autre approche
Message édité par theshockwave le 27-11-2016 à 18:39:26 ---------------
last.fm
|