Plan de table aléatoire

Plan de table aléatoire - Javascript/Node.js - Programmation

Marsh Posté le 26-11-2021 à 09:13:34    

Bonjour
 
J'ai de solides notions en HTML/CSS/SASS (qui ne sont pas des langages de programmation), et quelques vagues et très légères notions en javaScript, d'où ma demande d'aide à ceux qui possèdent une logique algorithmique.
 
Ma problématique est la suivante :
 
J'ai 20 invités, donc 20 noms. J'ai 5 tables avec 4 invités par table.
 
Je souhaite de manière totalement aléatoire assigner mes 20 invités aux 5 tables.
 
J'ai vaguement l'idée qu'il va falloir un ou plusieurs array et des boucles, mais suis complètement perdu dans le process et le bon ordre des choses.
 
Si quelqu'un pouvait svp m'aider à faire cet algorithme :)


Message édité par lePureStyle le 26-11-2021 à 16:07:42
Reply

Marsh Posté le 26-11-2021 à 09:13:34   

Reply

Marsh Posté le 26-11-2021 à 10:58:31    

Y'a plusieurs façon de faire mais je dirait que la plus simple à comprendre c'est sans doute de prendre des morceaux d'un tableau au préalable mélangé.
Je te met du pseudo code et tu pourras te renseigner ou revenir vers nous si vraiment tu n'y arrives pas...
 

Code :
  1. function Shuffle(my_array) {
  2. //fonction qui doit se trouver assez facilement sur Internet
  3. //grosso modo tu dépiles un array 'au hasard' pour en remplir un autre que tu renvoie à la fin
  4. return my_shuffled_array;
  5. }
  6. var guest_names = ['luc', 'jean', ...];
  7. var shuffled_names = Shuffle(guest_names);
  8. do {
  9. //on tire 5 noms du tableau "mélangé" en les enlevants de celui-ci
  10. var tmp_names = shuffled_names.splice(0, 5);
  11. //on les envoies dans la console de debug, tu pourais les afficher dans un div ou autre...
  12. console.log(tmp_names);
  13. } while (shuffled_names.length > 0);//condition pour continuer la boucle, on le fait tant qu'on a des noms


---------------
D3
Reply

Marsh Posté le 26-11-2021 à 16:20:08    

Merci pour ton aide !  :jap:  
 
En me renseignant à partir de ton code j'ai pu trouver en farfouillant le net une solution à base de mélange de Fisher-Yates.
Donc grosso modo on a une fonction qui mélange le tableau, puis une seconde qui découpe en plusieurs parties.
Je ne sais pas si on peut optimiser le code en fusionnant les 2 fonctions en une seule...
 
voici ce que ça donne :  
 

Code :
  1. let guests = ['pierre', 'paul', 'jacques', 'michel', 'henri', 'louis', 'monique', 'céline', 'gérard', 'annick', 'rose', 'héloise', 'carmen' , 'jeff', 'sandrine', 'marie', 'ines', 'milton', 'david', 'chris'];
  2. function shuffle(array) {
  3.   let m = array.length, t, i;
  4.   // While there remain elements to shuffle…
  5.   while (m) {
  6.     // Pick a remaining element…
  7.     i = Math.floor(Math.random() * m--);
  8.     // And swap it with the current element.
  9.     t = array[m];
  10.     array[m] = array[i];
  11.     array[i] = t;
  12.   }
  13.  
  14.   return array;
  15. }
  16. function spliceIntoChunks(arr, chunkSize) {
  17.     const res = [];
  18.     while (arr.length > 0) {
  19.         const chunk = arr.splice(0, chunkSize);
  20.         res.push(chunk);
  21.     }
  22.     return res;
  23. }
  24. console.log(spliceIntoChunks(shuffle(guests), 5));


Message édité par lePureStyle le 26-11-2021 à 16:33:22
Reply

Marsh Posté le 26-11-2021 à 16:41:38    

Optimiser, je ne penses pas vraiment, et je ne suis pas sur que ce soit bien nécessaire...
 
Tu peux compresser le code en supprimant les espaces et "anonymisant" tes fonctions, et/ou l’encapsuler dans une fonction anonyme pour l'isoler du reste du code de ta page mais ça me semble un peu overkill ! ^^
 
Est ce qu'il va y'avoir de l'interactivité, genre l'utilisateur rentre les noms et un nombre de table par exemple ?


---------------
D3
Reply

Marsh Posté le 26-11-2021 à 17:12:16    

mechkurt a écrit :

Optimiser, je ne penses pas vraiment, et je ne suis pas sur que ce soit bien nécessaire...
 
Tu peux compresser le code en supprimant les espaces et "anonymisant" tes fonctions, et/ou l’encapsuler dans une fonction anonyme pour l'isoler du reste du code de ta page mais ça me semble un peu overkill ! ^^
 
Est ce qu'il va y'avoir de l'interactivité, genre l'utilisateur rentre les noms et un nombre de table par exemple ?


 
Non aucune interactivité.
 
Je trouvais ça beaucoup plus sympa à faire en code (donc pratiquer un peu), qu'avec des petits bouts de papier dans un chapeau.  :)

Reply

Marsh Posté le 26-11-2021 à 17:36:39    

Ok, tu as des sites qui compile en live le code pour faire joujou comme ca genre codepen.io ou jsfiddle...
 
Vu que tu fais du web (html et css) tu peux t'amuser a dessiner les tables dans un canevas ou en css et a les peupler de tes noms dynamique, ou bien te lancer un nouveau défi...
 
Bonne continuation !


---------------
D3
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed