Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Jérémi Grenier-Berthiaume
  2. // 22 novembre 2017
  3.  
  4. /*
  5. Programme qui génère un tableau dont les colonnes ont la largeur
  6. minimale qui permet l'alignement des colonnes. De plus, les éléments
  7. sont alignés vers la droite.
  8. Le codage utilise la méthode forEach.
  9. La fonction à appeler est "grilleMat", et utilise un tableau 2D comme
  10. unique paramètre (qui doit avoir le même nombre d'éléments pour chacun
  11. de ses sous-tableaux).
  12. */
  13.  
  14. var grilleMat = function (tableau) {
  15.     var texte = "";
  16.     var long = longCol(tableau);
  17.  
  18.     tableau.forEach(function(x,y){
  19.         texte += gener(tableau,long) + "\n"; // Lignes "cadre"
  20.         texte += donnee(tableau,long,y); // Lignes avec données
  21.     });
  22.    
  23.     texte += gener(tableau,long); // Pour la toute dernière ligne
  24.     return texte;
  25. };
  26.  
  27. var donnee = function (tableau,long,index) {
  28.     /* Retourne une chaîne correspondant à une ligne de données alignées
  29.        à droite dans leur cellule respective
  30.        Par exemple, pourrait retourner "|  0|bonjour| 11|Q|\n" */
  31.     var col = "|";
  32.     var texte = col;
  33.     var tab = tableau[index]; // Extrait le sous-tableau désiré
  34.     tab.forEach(function(x,y){
  35.         var str = x + ""; // Pour s'assurer que 'str' soit une chaîne
  36.         texte += " ".repeat(long[y]-str.length) + x + col;
  37.     // Rajoute des espaces (au besoin)  et la donnée dans la "case" du tableau
  38.     });
  39.     texte += "\n";
  40.     return texte;
  41. };
  42.  
  43. var gener = function (tableau,long) {
  44.     /* Retourne une chaîne correspondant à une ligne complète du tableau à générer
  45.        Par exemple, pourrait retourner "+--+--+---+---+-+" */
  46.     var texte = "";
  47.     tableau[0].forEach(function(x,y){
  48.     texte += "+" + "-".repeat(long[y]);
  49.     // Rajoute une chaîne contenant un + et 'long[y]' fois le caractère "-"
  50.     });
  51.     texte += "+";
  52.     return texte;
  53. };
  54.  
  55. var longCol = function(tableau){
  56.     /* Pour déterminer la longueur de chaque colonne
  57.        longCol([[1,10,11,120,2],[10,1,3,100,1],[3,0,100,1,1]]) retourne [2,2,3,3,1] */
  58.    
  59.     var size = Array(tableau[0].length).fill(0); // Un index pour chaque colonne
  60.     tableau.forEach(function(x){ // Chaque tableau secondaire est 'x'
  61.         x.forEach(function(y,z){ // La valeur "y"  à l'index "z"
  62.             var str = "" + y; // S'assurer de faire la conversion en chaîne
  63.             var temp = str.length;
  64.             if (size[z] < temp) {
  65.         /* Puisque "z" représente les colonnes, on observe si la nouvelle
  66.         longueure évaluée est plus grande que l'ancienne */
  67.                 size.splice(z,1,temp); // Et si c'est le cas, on fait le remplacement
  68.             }
  69.         });
  70.     });
  71.     return size;
  72. };
  73.  
  74. var testGrilleMat = function () {
  75.     console.assert(grilleMat([["oranges",5],["kiwis",1000]]) == "+-------+----+\n|oranges|   5|\n+-------+----+\n|  kiwis|1000|\n+-------+----+");
  76.     console.assert(grilleMat([[1,10,11,120,2],[10,1,3,100,1],[3,0,100,1,1]]) == "+--+--+---+---+-+\n| 1|10| 11|120|2|\n+--+--+---+---+-+\n|10| 1|  3|100|1|\n+--+--+---+---+-+\n| 3| 0|100|  1|1|\n+--+--+---+---+-+");
  77.     console.assert(grilleMat([[0]]) == "+-+\n|0|\n+-+");
  78.     console.assert(grilleMat([[0,0]]) == "+-+-+\n|0|0|\n+-+-+");
  79. };
  80.  
  81. testGrilleMat();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement