O desafio
Dada uma entrada CSV, produza uma tabela unicode adequada usando caracteres de caixa.
Formatação
A tabela será formatada usando as seguintes regras:
- A largura da coluna será igual ao valor mais longo dessa coluna
- Todos os dados da tabela serão justificados
- Cada tabela assumirá a primeira linha csv como o cabeçalho
- A tabela usará os seguintes caracteres para suas bordas:
┌ ┬ ┐ ├ ┼ ┤ └ ┴ ┘ ─ │
Exemplo
Input:
Name,Age,Gender
Shaun,19,Male
Debra,19,Female
Alan,26,Male
George,15,Male
Output:
┌──────┬───┬──────┐
│Name │Age│Gender│
├──────┼───┼──────┤
│Shaun │19 │Male │
│Debra │19 │Female│
│Alan │26 │Male │
│George│15 │Male │
└──────┴───┴──────┘
Regras
- Aplicam-se brechas padrão
- Você pode enviar um programa completo, uma função ou um lambda
- A entrada pode ser de um arquivo, um argumento do programa ou qualquer alternativa aceitável
- A saída pode ser para um arquivo, retornado ou qualquer alternativa aceitável
- A entrada CSV deve ter o mesmo formato usado no meu exemplo.
- A resposta mais curta em bytes vence.
A entrada CSV deve assumir o seguinte formato:
Header1,Header2,Header3 newline
Column1,Column2,Column3 newline
Column1,Column2,Column3 optional_newline
Respostas:
Tente (Dyalog) APL ,
3843 bytesA última linha de entrada deve ter uma nova linha à direita.
Experimente online! Na versão offline do Dyalog APL, execute
]boxing ON -style=min
para o mesmo efeito.Explicação
{
...}
uma função anônima em que⍵
representa o argumento:¯1 ⌽ ⍵
gire a nova linha à direita(s ←
...)
defina a função s da seguinte maneira e aplique-a1 ↓¨
solte o primeiro caractere de cada⊢ ⊂⍨
linha, divida onde⊃ = ⊢
o primeiro caractere é igual aos caracteres da string',' ,¨
Anexe uma vírgula a cada linhas¨
aplique a função s a cada linha{
...}
agora aplique a seguinte função anônima:1 ↓ ⍵
solte o primeiro elemento (os cabeçalhos da linha)↓ ⍉ ↑
transpor a lista de linhas para a lista de colunas↑¨
transformar cada elemento (uma lista de entradas) em uma matriz de entradas preenchidas⍉ ⍪
transformar em matriz de uma coluna e transpor para matriz de uma linha(⊃⍵) ⍪
coloque o primeiro elemento do argumento (a lista de cabeçalhos) no topo`Nota: Embora os caracteres de desenho de linha não sejam explicitamente usados em minha solução, eles fazem parte do conjunto de caracteres APL e também são contados como bytes únicos.
fonte
Is input using list or array of strings (and no newlines) valid? Nope.
PowerShell 3 ou superior, 365 bytes
Sinto que isso poderia melhorar muito, mas fiquei sem tempo. Todas as terminações de linha estão
\n
sem\r
, a codificação é UTF8 sem BOM.fonte
Raquete 578 bytes
Ungolfed:
Teste:
Resultado:
fonte
JavaScript (ES6 | FireFox), 286 bytes
Usa
padEnd
, que é específico do FireFox.fonte
g('└┴┘')
equivalente ag└┴┘
(com backticks depoisg
e no final)?padEnd
não é padrão. Você deve especificar o ambiente de execução necessário.`foo`+bar+`baz`
- você pode salvar um byte usando um modelo`foo${bar}baz`
.JavaScript (ES6), 281 bytes
Nota: insira como uma única sequência com novas linhas - conforme solicitado pelo OP. Outras respostas usam uma lista de strings - usando uma matriz de strings na entrada, posso evitar a primeira divisão e cortar 9 bytes.
Menos golfe
Teste
fonte
Python 3, 318 bytes
-3 bytes para usar a
%
formatação e -1 para abreviarstr.join
Requer entrada entre aspas.
fonte
input()
leva apenas uma linha em cada chamada. Você precisará ligarinput()
até que não haja mais linhas ou ler diretamente destdin
.C #, 696 bytes
Golfe:
Ungolfed (e melhor, porque ^ que não serve para ninguém):
Teste:
fonte
Is input using list or array of strings (and no newlines) valid? Nope.
Perl, 273 + 9 (
-CS -nlaF,
sinalizadores) = 282 bytesUsando:
Experimente em Ideone .
fonte
PHP, 313 bytes
demolir
Teste em ideone
fonte
APL (Dyalog Extended) ,
36SBCS de 25 bytesPrograma completo. Supõe que
ABCDEFGHIJKLMNOPQRSTUVWXYZ
é o arquivo CSV. Imprime em stdout.Experimente online!
⎕A
a letra maiúscula Um lphabet (o mais curto-se referência incorporada na cadeia de caracteres)⎕CSV
ler esse ficheiro e converso de CSV a matriz dem←
armazenamento comom
(para m Atrix)1↓
gota a primeira fileira⍉
de transposição↓
dividida em lista de colunas↑¨
misturar cada lista de strings numa matriz(
…)⍪
Empilhe o seguinte em cima disso:1↑m
faça a primeira linha dem
⌂disp
aplicardfns.disp
a isso (desenha caracteres de desenho de linha)fonte