La tâche consiste à afficher la table ascii pour un tableau donné.
Contribution
L'entrée est une matrice 2D. La longueur de ligne de la matrice est identique à la longueur d'un tableau. Alternativement, vous pouvez saisir une matrice 2D dont la première ligne est un en-tête. La dimension extérieure est la ligne.
Exemple d'entrée:
[["License","2008-05-08","2009-03-11","2011-11-22","2013-08-12","2015-11-19"],["GPLv2","58.69%","52.2%","42.5%","33%","23%"],["GPLv3","1.64%","4.15%","6.5%","12%","9%"],["LGPL 2.1","11.39%","9.84%","?","6%","5%"],["LGPL 3.0","? (<0.64%)","0.37%","?","3%","2%"],["GPL family together","71.72% (+ <0.64%)","66.56%","?","54%","39%"]]
Production
La sortie d'un tableau ressemble à ci-dessous.
+---------------------+-------------------+------------+------------+------------+------------+
| License | 2008-05-08 | 2009-03-11 | 2011-11-22 | 2013-08-12 | 2015-11-19 |
+---------------------+-------------------+------------+------------+------------+------------+
| GPLv2 | 58.69% | 52.2% | 42.5% | 33% | 23% |
| GPLv3 | 1.64% | 4.15% | 6.5% | 12% | 9% |
| LGPL 2.1 | 11.39% | 9.84% | ? | 6% | 5% |
| LGPL 3.0 | ? (<0.64%) | 0.37% | ? | 3% | 2% |
| GPL family together | 71.72% (+ <0.64%) | 66.56% | ? | 54% | 39% |
+---------------------+-------------------+------------+------------+------------+------------+
Chaque cellule a exactement un espace à gauche et au moins un espace à droite, rembourré jusqu'à ce que les barres soient alignées. Cependant, au moins une cellule n'a qu'un seul espace à sa droite.
Cas de test
Input:
[["Hello", "World", "!!!"],["aa", "bbbbbbbbb", "CcC"], ["Pyth", "CJam", "GolfScript"]]
Output:
+-------+-----------+------------+
| Hello | World | !!! |
+-------+-----------+------------+
| aa | bbbbbbbbb | CcC |
| Pyth | CJam | GolfScript |
+-------+-----------+------------+
Exemple de soumission
function ascii_table(array, header) {
var lengths = array[0].map(function(_, i) {
var col = array.map(function(row) {
if (row[i] != undefined) {
return row[i].length;
} else {
return 0;
}
});
return Math.max.apply(Math, col);
});
array = array.map(function(row) {
return '| ' + row.map(function(item, i) {
var size = item.length;
if (size < lengths[i]) {
item += new Array(lengths[i]-size+1).join(' ');
}
return item;
}).join(' | ') + ' |';
});
var sep = '+' + lengths.map(function(length) {
return new Array(length+3).join('-');
}).join('+') + '+';
if (header) {
return sep + '\n' + array[0] + '\n' + sep + '\n' +
array.slice(1).join('\n') + '\n' + sep;
} else {
return sep + '\n' + array.join('\n') + '\n' + sep;
}
}
C'est du code-golf , donc la soumission avec le moins d'octets gagne!
Réponses:
CJam, 58 octets
Quelqu'un sait truc de golf à CJam?
la source
vim,
139138134Accepte les entrées sous la forme indiquée dans les cas de test. Ou non être valide, car cela repose sur la chaîne d'entrée ne contenant pas
"
,,
,]
ou|
caractères.Si l'entrée doit pouvoir contenir
]
s, elle:%s/]/\t./<cr>
peut être remplacée parqe$s<Tab>.<esc>j@eq@e
pour 2 caractères supplémentaires. Il n'y a pas de moyen facile de permettre",|
l'entrée.Doit être exécuté dans un environnement Unix, car il repose sur l'
column
outil de ligne de commande.Explication légèrement dépassée (par une révision, mais c'était juste un peu de réorganisation):
Merci smpl pour un octet!
la source
:set
par:se
.JavaScript (ES6), 210
212 219Modifier 2 octets enregistrés thx @Neil
TESTER
la source
a=>(
?(c,i)=>s[i]>(l=c.length)?0:s[i]=l
vous fait gagner deux octets, je pense.Python 2, 190
Cette solution utilise des compréhensions de liste et des expressions de générateur. Il accepte une liste de listes et renvoie une chaîne au format requis.
Le code avant le minifieur:
qui génère:
la source
from tabulate import*;a=input();print tabulate(a[1:],a[0],'psql',numalign='left')
MATLAB,
244 239 229226Explication à suivre.
Cas de test:
Contribution:
Production:
la source
Ruby,
129126127126 caractèresExemple d'exécution:
la source