A la ferme du code heureux, des codes, des programmes, broutent en champ libre.
Comment foutre le bordel
Un algorithme simple et efficace pour mélanger une liste de valeurs aléatoirement.

Le code en langage C (openFrameworks, Arduino, etc..).
L'argument passé à la fonction et un pointeur vers la liste (ou tableau à une dimension).



void bordel(int *array){
// on calcul le nombre d'elements qui constituent notre tableau
int num = sizeof(array) / sizeof(array[0]);

while (--num > 0){
int j = random(num);
int temp = array[num];
array[num] = array[j];
array[j] = temp;
}
}


Sont application dans un sketch Arduino :
On déclare une liste de dix valeurs ordonnées que l'on mélange ensuite toutes les secondes.
L'algorithme sert ici à générer une suite de valeurs aléatoires et non répétitives.



// Tout d'abord on déclare un tableau d'entiers ordonnés
int liste_entier[10] = {0,1,2,3,4,5,6,7,8,9};

void setup() {
// initialisation du port série
Serial.begin (9600);
}

void loop() {
// afficher la liste dans la console
for (int i = 0; i<10; i++) {
Serial.println(liste_entier[i]);
}
Serial.println("génération du bordel");
// mélanger la liste
bordel(liste_entier);

// attendre une seconde
delay(1000);
}

void bordel(int *array){
// on calcul le nombre d'elements qui constituent notre tableau
int num = sizeof(array) / sizeof(array[0]);

while (--num > 0){
int j = random(num);
int temp = array[num];
array[num] = array[j];
array[j] = temp;
}
}


La même fonction en Java / Processing / JavaScript.



void bordel(int[] array) {
int num = array.length;
while (--num > 0) {
int j = (int)random(num);
int temp = array[num];
array[num] = array[j];
array[j] = temp;
}
}