タスクは、指定された配列のASCIIテーブルを表示することです。
入力
入力は2Dマトリックスです。行列の行の長さは配列の長さと同じです。あるいは、最初の行がヘッダーである2Dマトリックスの入力を取ることができます。外側の次元は行です。
入力例:
[["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%"]]
出力
テーブルの出力は次のようになります。
+---------------------+-------------------+------------+------------+------------+------------+
| 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% |
+---------------------+-------------------+------------+------------+------------+------------+
各セルには、左側に1つ、右側に少なくとも1つのスペースがあり、バーが揃うまでパディングされます。ただし、少なくとも1つのセルの右側には1つのスペースしかありません。
テストケース
Input:
[["Hello", "World", "!!!"],["aa", "bbbbbbbbb", "CcC"], ["Pyth", "CJam", "GolfScript"]]
Output:
+-------+-----------+------------+
| Hello | World | !!! |
+-------+-----------+------------+
| aa | bbbbbbbbb | CcC |
| Pyth | CJam | GolfScript |
+-------+-----------+------------+
提出例
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;
}
}
これはcode-golfであるため、バイト数が最小の提出が勝ちです!
最初の回答者のように見えます。ソリューションの例を使用しないでください。
—
アカンカ
@ChristianIrwanが削除されました。
—
jcubic
削除しないでください、私は挑戦を理解しようとします。
—
アカンカ
チャットに参加するには十分な評判があります。チャットでこれを改善することについて話し合うべきだと思いますか?(それは拡張議論になるようです。)
—
wizzwizz4
入力を配列ではなく単一の文字列として取得する場合、入力例とまったく同じ形式にする必要がありますか?もしそうなら、エスケープ文字はありますか(または入力に引用符がありますか)?また、入力に配列区切り文字以外の角かっこまたはコンマがないと仮定できますか?垂直バーはどうですか?一般に、テーブル内の文字列を構成できる有効な文字は何ですか?
—
ドアノブ