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=minpara 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
\nsin\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ésgy al final)?padEndNo 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.joinRequiere 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
ABCDEFGHIJKLMNOPQRSTUVWXYZes el archivo CSV. Imprime en stdout.Pruébalo en línea!
⎕Ael alfabeto en mayúscula A (la cadena incorporada más corta a referencia)⎕CSVlee 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↑mtome la primera fila dem⌂dispaplicardfns.dispa eso (dibuja caracteres de dibujo lineal)fuente