A tarefa é exibir a tabela ascii para uma determinada matriz.
Entrada
A entrada é uma matriz 2D. O comprimento da linha da matriz é igual ao comprimento de uma matriz. Como alternativa, você pode receber a entrada de uma matriz 2D, pois a primeira linha é um cabeçalho. A dimensão externa é a linha.
Exemplo de entrada:
[["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%"]]
Resultado
A saída de uma tabela é semelhante a abaixo.
+---------------------+-------------------+------------+------------+------------+------------+
| 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% |
+---------------------+-------------------+------------+------------+------------+------------+
Cada célula possui exatamente um espaço à esquerda e pelo menos um espaço à direita, preenchido até as barras alinhadas. No entanto, pelo menos uma célula possui apenas um espaço à direita.
Casos de teste
Input:
[["Hello", "World", "!!!"],["aa", "bbbbbbbbb", "CcC"], ["Pyth", "CJam", "GolfScript"]]
Output:
+-------+-----------+------------+
| Hello | World | !!! |
+-------+-----------+------------+
| aa | bbbbbbbbb | CcC |
| Pyth | CJam | GolfScript |
+-------+-----------+------------+
Envio de exemplo
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;
}
}
Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
Respostas:
CJam, 58 bytes
Alguém sabe truque de golfe em CJam?
fonte
139,138134Aceita entrada no formato mostrado nos casos de teste. Pode ou não ser válido, pois isso depende da cadeia de entrada não contendo nenhum
"
,,
,]
, ou|
caracteres.Se a entrada precisar conter
]
s,:%s/]/\t./<cr>
poderá ser substituídaqe$s<Tab>.<esc>j@eq@e
por 2 caracteres extras. Não há uma maneira fácil de permitir",|
a entrada.Deve ser executado em um ambiente Unix, pois conta com a
column
ferramenta de linha de comando.Explicação ligeiramente desatualizada (por uma revisão, mas isso foi apenas um pouco de reorganização):
Obrigado smpl por um byte!
fonte
:set
por:se
.JavaScript (ES6), 210
212 219Editar 2 bytes salvos thx @Neil
TESTE
fonte
a=>(
?(c,i)=>s[i]>(l=c.length)?0:s[i]=l
economiza dois bytes, eu acho.Python 2, 190
Esta solução utiliza compreensão de lista e expressões geradoras. Ele aceita uma lista de listas e retorna uma sequência no formato necessário.
O código antes do minificador:
quais saídas:
fonte
from tabulate import*;a=input();print tabulate(a[1:],a[0],'psql',numalign='left')
MATLAB,
244 239 229226Explicação a seguir.
Caso de teste:
Entrada:
Resultado:
fonte
Ruby,
129126127126 caracteresExemplo de execução:
fonte