El reto
Dada una entrada CSV, genera una tabla Unicode adecuada utilizando caracteres de cuadro.
Formateo
La tabla se formateará utilizando las siguientes reglas:
- El ancho de columna será igual al valor más largo de esa columna
- Todos los datos de la tabla quedarán justificados
- Cada tabla asumirá que la primera fila csv es el encabezado
- La tabla utilizará los siguientes caracteres para sus bordes:
┌ ┬ ┐ ├ ┼ ┤ └ ┴ ┘ ─ │
Ejemplo
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 │
└──────┴───┴──────┘
Reglas
- Se aplican lagunas estándar
- Puede enviar un programa completo, una función o una lambda
- La entrada puede ser de un archivo, un argumento del programa o cualquier alternativa aceptable
- La salida puede ser a un archivo, devuelto o cualquier alternativa aceptable
- La entrada CSV debe tener el mismo formato que el usado en mi ejemplo.
- La respuesta más corta en bytes gana.
La entrada CSV debe tomar la siguiente forma:
Header1,Header2,Header3 newline
Column1,Column2,Column3 newline
Column1,Column2,Column3 optional_newline
Respuestas:
Pruebe (Dyalog) APL ,
3843 bytesLa última línea de entrada debe tener una nueva línea final.
Pruébalo en línea! En la versión fuera de línea de Dyalog APL, ejecute
]boxing ON -style=min
para el mismo efecto.Explicación
{
...}
una función anónima donde⍵
representa el argumento:¯1 ⌽ ⍵
rotar la nueva línea al frente(s ←
...)
defina la función s de la siguiente manera y aplíquela1 ↓¨
suelta el primer personaje de cada⊢ ⊂⍨
línea, dividida donde⊃ = ⊢
el primer caracter es igual a los caracteres en la cadena',' ,¨
luego anteponga una coma a cada líneas¨
aplicar la función s a cada línea{
...}
ahora aplique la siguiente función anónima:1 ↓ ⍵
suelte el primer elemento (los encabezados de fila)↓ ⍉ ↑
transponer la lista de filas en una lista de columnas↑¨
hacer cada elemento (una lista de entradas) en una matriz de entradas rellenadas⍉ ⍪
convertir en matriz de una columna, luego transponer en matriz de una fila(⊃⍵) ⍪
poner el primer elemento del argumento (la lista de encabezados) en la parte superior`Nota: Si bien los caracteres de dibujo lineal no se usan explícitamente en mi solución, son parte del conjunto de caracteres APL y también se contarían como bytes individuales.
fuente
Is input using list or array of strings (and no newlines) valid? Nope.
PowerShell 3+, 365 bytes
Siento que esto podría mejorarse mucho, pero se me acabó el tiempo. Todas las terminaciones de línea son
\n
sin\r
, la codificación es UTF8 sin BOM.fuente
Raqueta 578 bytes
Sin golf:
Pruebas:
Salida:
fuente
JavaScript (ES6 | FireFox), 286 bytes
Usos
padEnd
, que es específico de FireFox.fuente
g('└┴┘')
equivalente ag└┴┘
(con backticks despuésg
y al final)?padEnd
No es estándar. Debe especificar el entorno de ejecución necesario.`foo`+bar+`baz`
: puede guardar un byte utilizando una plantilla`foo${bar}baz`
.JavaScript (ES6), 281 bytes
Nota: ingrese como una sola cadena con nuevas líneas, según lo solicitado por OP. Otras respuestas usan una lista de cadenas: al usar una matriz de cadenas en la entrada, puedo evitar la primera división y cortar 9 bytes.
Menos golf
Prueba
fuente
Python 3, 318 bytes
-3 bytes para usar el
%
formato y -1 para abreviarstr.join
Requiere entrada entre comillas.
fuente
input()
solo toma una línea en cada llamada. Deberá llamarinput()
hasta que no haya más líneas, o leer directamente desdestdin
.C #, 696 bytes
Golfizado:
Sin golf (y más agradable, porque ^ eso no sirve de nada a nadie):
Pruebas:
fuente
Is input using list or array of strings (and no newlines) valid? Nope.
Perl, 273 + 9 (
-CS -nlaF,
banderas) = 282 bytesUtilizando:
Pruébalo en Ideone .
fuente
PHP, 313 bytes
Descompostura
Pruébalo en ideone
fuente
APL (Dyalog Extended) ,
3625 bytes SBCS dePrograma completo Asume que
ABCDEFGHIJKLMNOPQRSTUVWXYZ
es el archivo CSV. Imprime en stdout.Pruébalo en línea!
⎕A
el alfabeto en mayúscula A (la cadena incorporada más corta a referencia)⎕CSV
lee ese archivo y lo convierte de CSV a matriz dem←
almacenamiento a medida quem
(para m atrix)1↓
suelta la⍉
transposición de la primera fila↓
dividida en la lista de columnas↑¨
mezcla cada lista de cadenas en una matriz(
...)⍪
apile lo siguiente encima de eso:1↑m
tome la primera fila dem
⌂disp
aplicardfns.disp
a eso (dibuja caracteres de dibujo lineal)fuente