Le défi
Étant donné une entrée CSV, sortez une table Unicode appropriée en utilisant des caractères de boîte.
Mise en page
Le tableau sera formaté selon les règles suivantes:
- La largeur de colonne sera égale à la valeur la plus longue de cette colonne
- Toutes les données du tableau seront justifiées à gauche
- Chaque table suppose que la première ligne csv est l'en-tête
- Le tableau utilisera les caractères suivants pour ses bordures:
┌ ┬ ┐ ├ ┼ ┤ └ ┴ ┘ ─ │
Exemple
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 │
└──────┴───┴──────┘
Règles
- Des échappatoires standard s'appliquent
- Vous pouvez soumettre un programme complet, une fonction ou un lambda
- L'entrée peut provenir d'un fichier, d'un argument de programme ou de toute alternative acceptable
- La sortie peut être vers un fichier, retournée ou toute autre alternative acceptable
- L'entrée CSV doit prendre le même format que celui utilisé dans mon exemple.
- La réponse la plus courte en octets l'emporte.
L'entrée CSV doit prendre la forme suivante:
Header1,Header2,Header3 newline
Column1,Column2,Column3 newline
Column1,Column2,Column3 optional_newline
Réponses:
Essayez (Dyalog) APL ,
3843 octetsLa dernière ligne d'entrée doit avoir une nouvelle ligne de fin.
Essayez-le en ligne! Dans la version hors ligne de Dyalog APL, exécutez
]boxing ON -style=min
pour le même effet.Explication
{
...}
une fonction anonyme où⍵
représente l'argument:¯1 ⌽ ⍵
faire pivoter la nouvelle ligne de fin vers l'avant(s ←
...)
définissez la fonction s comme suit et appliquez-la1 ↓¨
déposez le premier caractère de chaque⊢ ⊂⍨
ligne, divisée où⊃ = ⊢
le premier caractère est égal aux caractères de la chaîne',' ,¨
puis ajoutez une virgule à chaque lignes¨
appliquer la fonction s à chaque ligne{
...}
appliquez maintenant la fonction anonyme suivante:1 ↓ ⍵
déposez le premier élément (les en-têtes de ligne)↓ ⍉ ↑
transposer la liste des lignes en liste des colonnes↑¨
faire de chaque élément (une liste d'entrées) une matrice d'entrées rembourrées⍉ ⍪
transformer en matrice à une colonne, puis transposer en matrice à une rangée(⊃⍵) ⍪
mettre le premier élément de l'argument (la liste des en-têtes) en haut`Remarque: Bien que les caractères de dessin au trait ne soient pas explicitement utilisés dans ma solution, ils font partie du jeu de caractères APL et seraient également comptés comme des octets uniques.
la source
Is input using list or array of strings (and no newlines) valid? Nope.
PowerShell 3+, 365 octets
J'ai l'impression que cela pourrait être beaucoup amélioré, mais j'ai manqué de temps. Toutes les fins de ligne sont
\n
sans\r
, le codage est UTF8 sans BOM.la source
Raquette 578 octets
Non golfé:
Essai:
Production:
la source
JavaScript (ES6 | FireFox), 286 octets
Utilise
padEnd
, qui est spécifique à FireFox.la source
g('└┴┘')
équivalent àg└┴┘
(avec des crochets aprèsg
et à la fin)?padEnd
n'est pas standard. Vous devez spécifier l'environnement d'exécution nécessaire.`foo`+bar+`baz`
- vous pouvez enregistrer un octet en utilisant un modèle`foo${bar}baz`
.JavaScript (ES6), 281 octets
Remarque: entrée sous forme de chaîne unique avec des retours à la ligne - comme demandé par OP. D'autres réponses utilisent une liste de chaînes - en utilisant un tableau de chaînes en entrée, je peux éviter le premier fractionnement et couper 9 octets.
Moins golfé
Tester
la source
Python 3, 318 octets
-3 octets pour utiliser la
%
mise en forme et -1 pour abrégerstr.join
Nécessite une entrée entre guillemets.
la source
input()
ne prend qu'une seule ligne à chaque appel. Vous devrez appelerinput()
jusqu'à ce qu'il n'y ait plus de lignes ou lire directement depuisstdin
.C #, 696 octets
Golfé:
Non golfé (et plus agréable, car ^ cela ne sert à personne):
Essai:
la source
Is input using list or array of strings (and no newlines) valid? Nope.
Perl, 273 + 9 (
-CS -nlaF,
drapeaux) = 282 octetsEn utilisant:
Essayez-le sur Ideone .
la source
PHP, 313 octets
panne
Testez-le chez ideone
la source
APL (Dyalog Extended) ,
3625 octets SBCSProgramme complet. Suppose que
ABCDEFGHIJKLMNOPQRSTUVWXYZ
c'est le fichier CSV. Imprime à stdout.Essayez-le en ligne!
⎕A
les majuscules A lphabet (la plus courte à la référence chaîne incorporé) la⎕CSV
lecture du document et converti à partir de CSV à matricem←
magasin quem
(pour m atrice)1↓
déposer la première rangée⍉
transposer↓
divisée en liste des colonnes↑¨
mélanger chaque liste de chaînes de caractères dans une matrice(
...)⍪
empilez ce qui suit en plus de cela:1↑m
prenez la première ligne dem
⌂disp
appliquerdfns.disp
à cela (dessine des caractères de dessin au trait)la source