Die Aufgabe besteht darin, eine ASCII-Tabelle für ein bestimmtes Array anzuzeigen.
Eingang
Die Eingabe ist eine 2D-Matrix. Die Zeilenlänge der Matrix entspricht der Länge eines Arrays. Alternativ können Sie eine 2D-Matrix eingeben, wobei die erste Zeile eine Überschrift ist. Die äußere Dimension ist die Reihe.
Beispiel Eingabe:
[["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%"]]
Ausgabe
Die Ausgabe einer Tabelle sieht wie folgt aus.
+---------------------+-------------------+------------+------------+------------+------------+
| 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% |
+---------------------+-------------------+------------+------------+------------+------------+
Jede Zelle hat genau ein Leerzeichen links und mindestens ein Leerzeichen rechts, bis die Balken ausgerichtet sind. Mindestens eine Zelle hat jedoch nur ein Leerzeichen auf der rechten Seite.
Testfälle
Input:
[["Hello", "World", "!!!"],["aa", "bbbbbbbbb", "CcC"], ["Pyth", "CJam", "GolfScript"]]
Output:
+-------+-----------+------------+
| Hello | World | !!! |
+-------+-----------+------------+
| aa | bbbbbbbbb | CcC |
| Pyth | CJam | GolfScript |
+-------+-----------+------------+
Beispiel Einreichung
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;
}
}
Das ist Code-Golf , also gewinnt die Einsendung mit der geringsten Anzahl von Bytes!
Antworten:
CJam, 58 Bytes
Kennt jemand einen Golf-Trick in CJam?
quelle
vim,
139138134Akzeptiert Eingaben in der in den Testfällen gezeigten Form. Alle enthalten kann oder auch nicht gültig sein, da dies nie auf der Eingabezeichenfolge beruht
"
,,
,]
, oder|
Zeichen.Wenn die Eingabe in der Lage sein muss,
]
s zu enthalten ,:%s/]/\t./<cr>
kann sie durchqe$s<Tab>.<esc>j@eq@e
2 zusätzliche Zeichen ersetzt werden. Es gibt keine einfache Möglichkeit,",|
die Eingabe zuzulassen .Muss in einer Unix-Umgebung ausgeführt werden, da dies auf dem
column
Befehlszeilentool beruht .Etwas veraltete Erklärung (durch eine Überarbeitung, aber das war nur ein bisschen Neuordnung):
Danke smpl für ein Byte!
quelle
:set
mit:se
.JavaScript (ES6), 210
212 219Bearbeite 2 Bytes, die dank @Neil gespeichert wurden
PRÜFUNG
quelle
a=>(
?(c,i)=>s[i]>(l=c.length)?0:s[i]=l
spart euch zwei bytes, denke ich.Python 2, 190
Diese Lösung verwendet Listenverständnisse und Generatorausdrücke. Es akzeptiert eine Liste von Listen und gibt eine Zeichenfolge im erforderlichen Format zurück.
Der Code vor dem Minifier:
welche Ausgänge:
quelle
from tabulate import*;a=input();print tabulate(a[1:],a[0],'psql',numalign='left')
MATLAB,
244 239 229226Erklärung folgt.
Testfall:
Eingang:
Ausgabe:
quelle
Ruby,
129126127126 ZeichenProbelauf:
quelle