From 0a1012dd273d093b224358a0ef7e28861492832a Mon Sep 17 00:00:00 2001 From: Jean-Christophe Engel Date: Thu, 27 Jun 2024 10:45:46 +0200 Subject: [PATCH] =?UTF-8?q?code.js=20:=20d=C3=A9placement=20code=20v=C3=A9?= =?UTF-8?q?rif=20tri=20=3D>=20tri.js=20;=20ajout=20g=C3=A9n=C3=A9rer=20nom?= =?UTF-8?q?=20unique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code.js | 395 ++++---------------------------------------------------- 1 file changed, 23 insertions(+), 372 deletions(-) diff --git a/code.js b/code.js index 518e97f..fc85dd9 100644 --- a/code.js +++ b/code.js @@ -203,7 +203,8 @@ function nbocc(elem, tab) { // renvoyer un nom au hasard d'un tableau en s'assurant qu'il n'a pas // d'homonyme après normalisation // ------------------------------------------------------------------------ -function getNom(tab) { +function getNom(tab) +{ while (true) { let nom = tab.at(Math.floor(Math.random() * tab.length)); let nb = nbocc(normaliser(nom), tab); @@ -243,383 +244,33 @@ function indonymes(chaine, tab) { return homos; } -// ------------------------------------------------------------------------ -// 1. première ville vide et dernière ville vide -// ==> comparer numéro premier et numéro dernier, inverser si besoin -// 2. première ville vide et dernière ville non vide -// décroissant : inverser si besoin -// 3. première ville non vide et dernière ville vide -// croissant : inverser si besoin -// 4. première ville non vide et dernière ville non vide -// 4.1 première ville < dernière ville : croissant, inverser si besoin -// 4.2 première ville > dernière ville : décroissant, inverser si besoin -// 4.3 première ville = dernière ville -// ==> comparer numéro premier et numéro dernier, inverser si besoin -// ------------------------------------------------------------------------ - -if (${premiere_ville} == "" && ${derniere_ville} == "") -{ - if (${numero_premier} > ${numero_dernier}) - { - // décroissant : inverser si besoin - } else { - // croissant : inverser si besoin +// fabriquer un nom qui contient une chaîne donnée +const upper = (str) => { + return str.charAt(0).toUpperCase() + str.slice(1); +}; +function homonyme(chaine, lg) { + let chars = 'aàbcdeéèfghijklmnoôpqrstuùvwxyz'; + let str = ''; + for (let i = 0; i < lg; i++) { + str += chars.charAt(Math.floor(Math.random() * chars.length)); } + let debut = upper(str.slice(0, lg/2)); + let fin = upper(str.slice(lg/2)); + return debut + chaine + fin; } -else if (${premiere_ville} == "" && ${derniere_ville} != "") -{ - // décroissant : inverser si besoin -} -else if (${premiere_ville} != "" && ${derniere_ville} == "") -{ - // croissant : inverser si besoin -} -else if (${premiere_ville} != "" && && ${derniere_ville} != "") -{ - if (${premiere_ville}.localeCompare(${derniere_ville}) < 0) - { - // croissant : inverser si besoin - } else if (${premiere_ville}.localeCompare(${derniere_ville}) > 0) - { - // décroissant : inverser si besoin - } else { - if (${numero_premier} > ${numero_dernier}) - { - // décroissant : inverser si besoin - } else { - // croissant : inverser si besoin - } - } -} - -// simplification ordre croissant -if (${premiere_ville} == "" && ${derniere_ville} == "" - && - ${numero_premier} > ${numero_dernier}) -{ - // décroissant : inverser -} -else if (${premiere_ville} == "" && ${derniere_ville} != "") -{ - // décroissant : inverser -} -else if (${premiere_ville} != "" && && ${derniere_ville} != "") -{ - if (${premiere_ville}.localeCompare(${derniere_ville}) > 0 - || - (${premiere_ville}.localeCompare(${derniere_ville}) == 0 - && - ${numero_premier} > ${numero_dernier})) - { - // décroissant : inverser - } -} - - -// simplification ordre décroissant -if (${premiere_ville} == "" && ${derniere_ville} == "" - && - ${numero_premier} < ${numero_dernier}) -{ - // croissant : inverser -} -else if (${premiere_ville} != "" && ${derniere_ville} == "") -{ - // croissant : inverser -} -else if (${premiere_ville} != "" && && ${derniere_ville} != "") -{ - if (${premiere_ville}.localeCompare(${derniere_ville}) < 0 - || - (${premiere_ville}.localeCompare(${derniere_ville}) == 0 - && - ${numero_premier} < ${numero_dernier})) - { - // croissant : inverser - } -} - +return homonyme(${nom_cherche}, 10); // ------------------------------------------------------------------------ -// contrôler si les membres sont triés par ordre (dé)croissant du nom du parent -// -// 1) au moins 2 parents non vides (donc forcément les deux premiers) -// - parent1 < parent2 => croissant -// - parent1 > parent2 => décroissant -// - parent1 = parent2 -// - membre1 < membre2 => croissant -// - membre1 > membre2 => décroissant -// - membre1 = membre2 -// - numéro1 < numéro 2 => croissant -// - numéro1 > numéro 2 => décroissant -// 2) un seul parent non vide (donc le premier) -// - membre2 < membre3 => croissant -// - membre2 > membre3 => décroissant -// - membre2 = membre3 -// - numéro2 < numéro 3 => croissant -// - numéro2 > numéro 3 => décroissant - -if (${nb_parents} >= 2) -{ - if (${parent1}.localeCompare(${parent2}) < 0) - { - // croissant - } - else if (${parent1}.localeCompare(${parent2}) > 0) - { - // décroissant - } - else if (${membre1}.localeCompare(${membre2}) < 0) - { - // croissant - } - else if (${membre1}.localeCompare(${membre2}) > 0) - { - // décroissant - } - else if (${numero1} < ${numero2}) - { - // croissant - } - else //if (${numero1} > ${numero2}) - { - // décroissant - } -} -// un seul parent -else if (${nb_total_membres} > 2) -{ - if (${membre2}.localeCompare(${membre3}) < 0) - { - // croissant - } - else if (${membre2}.localeCompare(${membre3}) > 0) - { - // décroissant - } - else if (${numero2} < ${numero3}) - { - // croissant - } - else //if (${numero2} > ${numero3}) - { - // décroissant - } -} - -// simplification ordre croissant -if (${nb_parents}) >= 2) -{ - if ((${parent1}.localeCompare(${parent2}) > 0) - || - (${parent1}.localeCompare(${parent2}) == 0 - && ${membre1}.localeCompare(${membre2}) > 0) - || - (${parent1}.localeCompare(${parent2}) == 0 - && ${membre1}.localeCompare(${membre2}) == 0 - && ${numero1} > ${numero2})) - { - // décroissant => inverser - } -} -// un seul parent -else if (${nb_total_membres} > 2) -{ - if ((${membre2}.localeCompare(${membre3}) > 0) - || - (${membre2}.localeCompare(${membre3}) == 0 - && ${numero2} > ${numero3})) - { - // décroissant => inverser - } -} - -// simplification ordre décroissant -if (${nb_parents}) >= 2) -{ - if ((${parent1}.localeCompare(${parent2}) < 0) - || - (${parent1}.localeCompare(${parent2}) == 0 - && ${membre1}.localeCompare(${membre2}) < 0) - || - (${parent1}.localeCompare(${parent2}) == 0 - && ${membre1}.localeCompare(${membre2}) == 0 - && ${numero1} < ${numero2})) - { - // croissant => inverser - } -} -// un seul parent -else if (${nb_total_membres} > 2) -{ - if ((${membre2}.localeCompare(${membre3}) < 0) - || - (${membre2}.localeCompare(${membre3}) == 0 - && ${numero2} < ${numero3})) - { - // croissant => inverser - } -} - +// générer un nouveau nom en s'assurant qu'il n'a pas +// d'homonyme après normalisation // ------------------------------------------------------------------------ -// contrôler si les membres sont triés par ordre (dé)croissant de la colonne responsable -// colonne responsable non vide en tête -// -// 1) au moins 2 oui dans la colonne responsable (donc forcément les deux premiers) -// - membre1 < membre2 => croissant -// - membre1 > membre2 => décroissant -// - membre1 = membre2 -// - numéro1 < numéro 2 => croissant -// - numéro1 > numéro 2 => décroissant -// 2) un seul oui dans la colonne responsable (donc le premier) -// - numéro2 < numéro 3 => croissant -// - numéro2 > numéro 3 => décroissant - -if (${nb_resp} >= 2) +function genererNom(tab) { - if (${membre1}.localeCompare(${membre2}) < 0) - { - // croissant - } - else if (${membre1}.localeCompare(${membre2}) > 0) - { - // décroissant - } - else if (${numero1} < ${numero2}) - { - // croissant - } - else //if (${numero1} > ${numero2}) - { - // décroissant - } -} -// un seul responsable -else if (${nb_total_membres} > 2) -{ - if (${membre2}.localeCompare(${membre3}) < 0) - { - // croissant - } - else if (${membre2}.localeCompare(${membre3}) > 0) - { - // décroissant - } - else if (${numero2} < ${numero3}) - { - // croissant - } - else //if (${numero2} > ${numero3}) - { - // décroissant + while (true) { + let nom = chaine(12); + let nb = nbocc(normaliser(nom), tab); + if (nb == 0) { return nom; } } } - -// simplification ordre croissant -if (${nb_resp}) >= 2) -{ - if (${membre1}.localeCompare(${membre2}) > 0 - || - (${membre1}.localeCompare(${membre2}) == 0 - && ${numero1} > ${numero2})) - { - // décroissant => inverser - } -} -// un seul responsable -else if (${nb_total_membres} > 2) -{ - if (${membre2}.localeCompare(${membre3}) > 0 - || - (${membre2}.localeCompare(${membre3}) == 0 - && ${numero2} > ${numero3})) - { - // décroissant => inverser - } -} - -// simplification ordre décroissant -if (${nb_resp}) >= 2) -{ - if (${membre1}.localeCompare(${membre2}) < 0 - || - (${membre1}.localeCompare(${membre2}) == 0 - && ${numero1} < ${numero2})) - { - // croissant => inverser - } -} -// un seul responsable -else if (${nb_total_membres} > 2) -{ - if (${membre2}.localeCompare(${membre3}) < 0 - || - (${membre2}.localeCompare(${membre3}) == 0 - && ${numero2} < ${numero3})) - { - // croissant => inverser - } -} - -let numeros = [ 8, 5, 9, 2, 3, 6, 7, 4, 1 ]; - -let noms = [ "Yopduu Cxùbvnn", "Xeosnm Rixwxé", "Vonôdjz Jcpùuèf", "Tnczgèb Ùttypmt", - "Sdcrdi Vzùmbim", "Kgazmà Éurbdv", "Izgzwùz Evjsqjeù","Hmupazn Chrédki", - "Lambert Paul" ]; - -let parents = [ "Lambert Paul", "Lambert Paul", "Lambert Paul", "Lambert Paul", - "Lambert Paul", "Lambert Paul", "Lambert Paul", "Lambert Paul", "" ]; - -function inverser(numeros, noms, parents) -{ - for (let i = 0; i < numeros.length; ++i) { - if (parents[i] != "") { - premier = i; - break; - } - } - for (let i = numeros.length - 1; i >= 0; --i) { - if (parents[i] != "") { - dernier = i; - break; - } - } - console.log("premier : ", numeros[premier], noms[premier], parents[premier]); - console.log("dernier : ", numeros[dernier], noms[dernier], parents[dernier]); - - if (parents[premier].localeCompare(parents[dernier]) < 0) - { - console.log(parents[premier], "<", parents[dernier]); - } - if (parents[premier].localeCompare(parents[dernier]) == 0 && - noms[premier].localeCompare(noms[dernier]) < 0) - { - console.log(parents[premier], "=", parents[dernier]); - console.log(noms[premier], "<", noms[dernier]); - } - if (parents[premier].localeCompare(parents[dernier]) == 0 && - noms[premier].localeCompare(noms[dernier]) == 0 && - numeros[premier] < numeros[dernier]) - { - console.log(parents[premier], "=", parents[dernier]); - console.log(noms[premier], "=", noms[dernier]); - console.log(numeros[premier], "<", numeros[dernier]); - } - - if (parents[premier].localeCompare(parents[dernier]) < 0 - || - (parents[premier].localeCompare(parents[dernier]) == 0 && - noms[premier].localeCompare(noms[dernier]) < 0) - || - (parents[premier].localeCompare(parents[dernier]) == 0 && - noms[premier].localeCompare(noms[dernier]) == 0 && - numeros[premier] < numeros[dernier])) - { - console.log("Inverser le tri"); - } - else { - console.log("Tri ok"); - } -} -inverser(numeros, noms, parents); +return genererNom(${lesnoms})