Wyzwanie
Biorąc pod uwagę wejście CSV, wypisz prawidłową tabelę Unicode, używając znaków w polu.
Formatowanie
Tabela zostanie sformatowana przy użyciu następujących reguł:
- Szerokość kolumny będzie równa najdłuższej wartości tej kolumny
- Wszystkie dane tabeli zostaną wyjustowane
- Każda tabela zakłada, że pierwszym wierszem csv jest nagłówek
- Tabela będzie używać następujących znaków do swoich granic:
┌ ┬ ┐ ├ ┼ ┤ └ ┴ ┘ ─ │
Przykład
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 │
└──────┴───┴──────┘
Zasady
- Obowiązują standardowe luki
- Możesz przesłać pełny program, funkcję lub lambda
- Dane wejściowe mogą pochodzić z pliku, argumentu programu lub dowolnej akceptowalnej alternatywy
- Dane wyjściowe mogą być do pliku, zwrócone lub do dowolnej akceptowalnej alternatywy
- Dane wejściowe CSV powinny mieć taki sam format, jak w moim przykładzie.
- Najkrótsza odpowiedź w bajtach wygrywa.
Dane wejściowe CSV powinny przyjąć następującą formę:
Header1,Header2,Header3 newline
Column1,Column2,Column3 newline
Column1,Column2,Column3 optional_newline
Odpowiedzi:
Wypróbuj (Dyalog) APL ,
3843 bajtyOstatni wiersz wprowadzania musi mieć końcowy znak nowej linii.
Wypróbuj online! W wersji offline Dyalog APL, wykonaj
]boxing ON -style=min
dla tego samego efektu.Wyjaśnienie
{
...}
anonimowa funkcja, w której⍵
reprezentuje argument:¯1 ⌽ ⍵
obróć tylną linię nowej linii do przodu(s ←
...)
zdefiniuj funkcję s następująco, i stosować go1 ↓¨
upuść pierwszy znak każdego z nich⊢ ⊂⍨
linia, podział gdzie⊃ = ⊢
pierwszy znak to znaki w ciągu',' ,¨
następnie wstaw przecinek do każdej liniis¨
zastosuj funkcję s do każdej linii{
...}
zastosuj teraz następującą anonimową funkcję:1 ↓ ⍵
upuść pierwszy element (nagłówki wierszy)↓ ⍉ ↑
transponuj listę wierszy do listy kolumn↑¨
przekształć każdy element (listę wpisów) w macierz wypełnionych wpisów⍉ ⍪
przekształć w macierz jednokolumnową, a następnie przetransponuj na macierz jednorzędową(⊃⍵) ⍪
umieść pierwszy element argumentu (listę nagłówków) na górze`Uwaga: Chociaż znaki mojego rysowania linii nie są jawnie używane w moim rozwiązaniu, są one częścią zestawu znaków APL i będą również liczone jako pojedyncze bajty.
źródło
Is input using list or array of strings (and no newlines) valid? Nope.
PowerShell 3+, 365 bajtów
Wydaje mi się, że można to znacznie poprawić, ale zabrakło mi czasu. Wszystkie zakończenia linii są
\n
bez\r
, kodowanie to UTF8 bez BOM.źródło
Rakieta 578 bajtów
Nie golfowany:
Testowanie:
Wynik:
źródło
JavaScript (ES6 | FireFox), 286 bajtów
Wykorzystuje
padEnd
specyfikę FireFox.źródło
g('└┴┘')
równoważneg└┴┘
(z backticks pog
i na końcu)?padEnd
jest niestandardowy. Należy określić niezbędne środowisko wykonywania.`foo`+bar+`baz`
- możesz zapisać bajt za pomocą szablonu`foo${bar}baz`
.JavaScript (ES6), 281 bajtów
Uwaga: wprowadź jako pojedynczy ciąg znaków z nowymi wierszami - zgodnie z żądaniem OP. Inne odpowiedzi używają listy ciągów - używając wejściowej tablicy ciągów mogę uniknąć pierwszego podziału i wycięcia 9 bajtów.
Mniej golfa
Test
źródło
Python 3, 318 bajtów
-3 bajty dla użycia
%
formatowania i -1 dla skrótustr.join
Wymaga danych wejściowych ujętych w cudzysłów.
źródło
input()
zajmuje tylko jedną linię na każde połączenie. Będziesz musiał dzwonić,input()
dopóki nie będzie więcej linii, lub czytać bezpośrednio zstdin
.C #, 696 bajtów
Gra w golfa:
Niegolfowany (i ładniejszy, ponieważ ^ nikomu to nie służy):
Testowanie:
źródło
Is input using list or array of strings (and no newlines) valid? Nope.
Perl, 273 + 9 (
-CS -nlaF,
flagi) = 282 bajtówZa pomocą:
Wypróbuj na Ideone .
źródło
PHP, 313 bajtów
awaria
Przetestuj to w ideone
źródło
APL (Dyalog Extended) ,
3625 bajtów SBCSPełny program Zakłada, że
ABCDEFGHIJKLMNOPQRSTUVWXYZ
jest to plik CSV. Drukuje na standardowe wyjście.Wypróbuj online!
⎕A
wielkie lphabet (najkrótsza do odniesienia wbudowanym ciąg) odczytać ten plik i konwertować z CSV do macierzy sklepie jako (dla m Atrix) spadnie pierwszy wiersz transpozycji podzielony na liście kolumn wymieszać każdą listę ciągów do matrycy … Ułóż na tym następujące elementy: weź pierwszy wiersz zastosowania do tego (rysuje znaki rysowania linii)⎕CSV
m←
m
1↓
⍉
↓
↑¨
(
)⍪
1↑m
m
⌂disp
dfns.disp
źródło