Advertisement
Guest User

Untitled

a guest
Jul 27th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.76 KB | None | 0 0
  1. <?php
  2. // On a trois couleurs
  3. $colors=array('ROUGE'=>1,'BLANC'=>2,'BLEU'=>3);
  4. // On a un tableau contenant ces trois couleurs, disposees au hasard
  5. $flag = array();
  6. $flagsize = 50;
  7. for ($i=0; $i<$flagsize; $i++) {
  8.     $flag[] = $colors[array_rand($colors)];
  9. }
  10. // On va parcourir le tableau une fois
  11. // les elements rouges seront rejetes a la "gauche" du tableau
  12. // les elements bleus seront rejetes a la droite du tableau
  13. // du coup on se retrouvera avec les blancs au milieu
  14. // (vu qu'on permute a chaque fois).
  15. // L'astuce, c'est que du coup comme c'est en une seule passe faut
  16. // garder trace de jusqu'ou c'est monochrome de chaque cote.
  17. $bordGauche = 0;
  18. $bordDroit = $flagsize - 1; // On est en zero-based ici
  19. $i = 0;
  20. while (($i < $flagsize) and ($i <= $bordDroit)) {
  21.     if ($flag[$i] == $colors['ROUGE']) {
  22.         // Si c'est rouge, ca doit aller a gauche
  23.         // Donc on permute l'element en cours avec
  24.         // celui qui est a la position "bordGauche"
  25.         $troisiemeMain = $flag[$bordGauche];
  26.         $flag[$bordGauche] = $flag[$i];
  27.         $flag[$i] = $troisiemeMain;
  28.         // Du coup, le bord gauche est une case plus a droite
  29.         $bordGauche++;
  30.         $i++;
  31.     }
  32.     elseif ($flag[$i] == $colors['BLEU']) {
  33.         // Si c'est bleu, ca doit aller a droite
  34.         // Meme operation donc, mais dans l'autre sens ;-)
  35.         $troisiemeMain = $flag[$bordDroit];
  36.         $flag[$bordDroit] = $flag[$i];
  37.         $flag[$i] = $troisiemeMain;
  38.         // Du coup, le bord droit est une case plus a gauche
  39.         $bordDroit--;
  40.         // MAIS on ne deplace pas le curseur, parce qu'on sait que
  41.         // ce qui est a GAUCHE de $i est trié, on n'a aucune garantie
  42.         // sur ce qui est à DROITE de $i, $flag[$i] inclus.
  43.     }
  44.     else {
  45.         // Si on est ici c'est que c'est une case blanche, on n'y touche pas
  46.         $i++;
  47.     }
  48. }
  49. // Et hop, trié !
  50. print_r($flag);
  51. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement