Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Jérémi Grenier-Berthiaume
- // 22 novembre 2017
- /*
- Programme qui génère un tableau dont les colonnes ont la largeur
- minimale qui permet l'alignement des colonnes. De plus, les éléments
- sont alignés vers la droite.
- Le codage utilise la méthode forEach.
- La fonction à appeler est "grilleMat", et utilise un tableau 2D comme
- unique paramètre (qui doit avoir le même nombre d'éléments pour chacun
- de ses sous-tableaux).
- */
- var grilleMat = function (tableau) {
- var texte = "";
- var long = longCol(tableau);
- tableau.forEach(function(x,y){
- texte += gener(tableau,long) + "\n"; // Lignes "cadre"
- texte += donnee(tableau,long,y); // Lignes avec données
- });
- texte += gener(tableau,long); // Pour la toute dernière ligne
- return texte;
- };
- var donnee = function (tableau,long,index) {
- /* Retourne une chaîne correspondant à une ligne de données alignées
- à droite dans leur cellule respective
- Par exemple, pourrait retourner "| 0|bonjour| 11|Q|\n" */
- var col = "|";
- var texte = col;
- var tab = tableau[index]; // Extrait le sous-tableau désiré
- tab.forEach(function(x,y){
- var str = x + ""; // Pour s'assurer que 'str' soit une chaîne
- texte += " ".repeat(long[y]-str.length) + x + col;
- // Rajoute des espaces (au besoin) et la donnée dans la "case" du tableau
- });
- texte += "\n";
- return texte;
- };
- var gener = function (tableau,long) {
- /* Retourne une chaîne correspondant à une ligne complète du tableau à générer
- Par exemple, pourrait retourner "+--+--+---+---+-+" */
- var texte = "";
- tableau[0].forEach(function(x,y){
- texte += "+" + "-".repeat(long[y]);
- // Rajoute une chaîne contenant un + et 'long[y]' fois le caractère "-"
- });
- texte += "+";
- return texte;
- };
- var longCol = function(tableau){
- /* Pour déterminer la longueur de chaque colonne
- longCol([[1,10,11,120,2],[10,1,3,100,1],[3,0,100,1,1]]) retourne [2,2,3,3,1] */
- var size = Array(tableau[0].length).fill(0); // Un index pour chaque colonne
- tableau.forEach(function(x){ // Chaque tableau secondaire est 'x'
- x.forEach(function(y,z){ // La valeur "y" à l'index "z"
- var str = "" + y; // S'assurer de faire la conversion en chaîne
- var temp = str.length;
- if (size[z] < temp) {
- /* Puisque "z" représente les colonnes, on observe si la nouvelle
- longueure évaluée est plus grande que l'ancienne */
- size.splice(z,1,temp); // Et si c'est le cas, on fait le remplacement
- }
- });
- });
- return size;
- };
- var testGrilleMat = function () {
- console.assert(grilleMat([["oranges",5],["kiwis",1000]]) == "+-------+----+\n|oranges| 5|\n+-------+----+\n| kiwis|1000|\n+-------+----+");
- 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+--+--+---+---+-+");
- console.assert(grilleMat([[0]]) == "+-+\n|0|\n+-+");
- console.assert(grilleMat([[0,0]]) == "+-+-+\n|0|0|\n+-+-+");
- };
- testGrilleMat();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement