Tenho certeza que a maioria de nós já viu resultados SQL em um terminal, todos ordenadamente formatados em linhas e colunas. Se você não tiver, aqui está um exemplo:
+----------+-----------+----------------+
| column 1 | column 2 | column 3 |
+----------+-----------+----------------+
| data | more data | even more data |
| etc | just goes | on and on |
+----------+-----------+----------------+
Seu objetivo para esse desafio é, considerando as colunas e os dados da linha de uma tabela, desenhe a tabela nesse estilo. Deve haver uma linha horizontal na parte superior e inferior da tabela e uma logo abaixo da linha do cabeçalho. Deve haver linhas verticais entre todas as colunas e uma nos dois lados da tabela. Você deve usar tubos para linhas verticais, hífens para linhas horizontais e pontos positivos para onde eles se cruzam.
Específicos:
- Os dados podem ser inseridos via stdin ou como argumento para uma função, mas devem estar em alguma forma de string
- Os dados devem ser divididos pelo delimitador de string
;
- Os dados consistirão apenas em caracteres ASCII, não serão citados e não conterão o delimitador.
- A primeira linha dos dados será usada para cabeçalhos de coluna
- Os dados sempre terão o mesmo número de colunas
- A entrada sempre conterá pelo menos duas linhas (um cabeçalho, um dado). Você não precisa lidar com conjuntos vazios.
- Uma nova linha à direita ou anterior é permitida
- Cada coluna deve ter a largura do elemento mais largo, preenchendo os elementos mais curtos à direita (bônus -5% se você digitar números à esquerda)
- Deve haver 1 espaço de preenchimento antes e depois dos cabeçalhos e dados, exceto quando a coluna for mais larga
- Você não tem permissão para usar o
mysql
programa real para gerar a tabela - Aplicam-se brechas padrão
Entrada de amostra:
column 1;column 2;column 3
hello;world;test
longer data;foo;bar
Resultado
+-------------+----------+----------+
| column 1 | column 2 | column 3 |
+-------------+----------+----------+
| hello | world | test |
| longer data | foo | bar |
+-------------+----------+----------+
Pontuação:
O menor número de bytes vence, é claro. Bônus de -5% para números de preenchimento à esquerda (veja detalhes).
Respostas:
CJam,
6758 bytesExperimente on-line no intérprete CJam .
fonte
JavaScript (ES6), 262 bytes
Demo
Por ser o ES6, esta demonstração funciona no Firefox e Edge no momento. Por algum motivo, ele não funciona no Chrome / Opera, mesmo com os recursos experimentais de JavaScript ativados.
fonte