Tantangan
Diberikan input CSV, output tabel unicode yang tepat menggunakan karakter kotak.
Memformat
Tabel akan diformat menggunakan aturan berikut:
- Lebar kolom akan sama dengan nilai terpanjang dari kolom itu
- Semua data tabel akan dibenarkan
- Setiap tabel akan menganggap baris csv pertama sebagai header
- Tabel akan menggunakan karakter berikut untuk perbatasannya:
┌ ┬ ┐ ├ ┼ ┤ └ ┴ ┘ ─ │
Contoh
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 │
└──────┴───┴──────┘
Aturan
- Celah standar berlaku
- Anda dapat mengirimkan program lengkap, fungsi, atau lambda
- Input dapat dari file, argumen program atau alternatif apa pun yang dapat diterima
- Output dapat berupa file, dikembalikan atau alternatif apa pun yang dapat diterima
- Input CSV harus menggunakan format yang sama seperti yang digunakan dalam contoh saya.
- Jawaban terpendek dalam byte menang.
Input CSV harus berupa:
Header1,Header2,Header3 newline
Column1,Column2,Column3 newline
Column1,Column2,Column3 optional_newline
Jawaban:
Coba (Dyalog) APL ,
3843 byteBaris input terakhir harus memiliki baris tambahan.
Cobalah online! Dalam versi offline Dyalog APL, jalankan
]boxing ON -style=min
untuk efek yang sama.Penjelasan
{
...}
fungsi anonim yang⍵
mewakili argumen:¯1 ⌽ ⍵
putar baris baru yang tertinggal ke depan(s ←
...)
tentukan fungsi s sebagai berikut, dan terapkan1 ↓¨
drop karakter pertama masing-masing⊢ ⊂⍨
baris, bagi di mana⊃ = ⊢
karakter pertama sama dengan karakter dalam string',' ,¨
lalu tambahkan koma ke setiap bariss¨
terapkan fungsi s untuk setiap baris{
...}
sekarang terapkan fungsi anonim berikut:1 ↓ ⍵
drop elemen pertama (header baris)↓ ⍉ ↑
transposkan daftar baris ke dalam daftar kolom↑¨
buat setiap elemen (daftar entri) menjadi matriks entri yang diisi⍉ ⍪
buat menjadi matriks satu kolom, lalu transposkan menjadi matriks satu baris(⊃⍵) ⍪
letakkan elemen pertama argumen (daftar header) di atas`Catatan: Meskipun karakter gambar garis tidak secara eksplisit digunakan dalam solusi saya, mereka adalah bagian dari rangkaian karakter APL, dan juga akan dihitung sebagai byte tunggal.
sumber
Is input using list or array of strings (and no newlines) valid? Nope.
PowerShell 3+, 365 byte
Saya merasa ini bisa banyak diperbaiki tetapi saya kehabisan waktu. Semua akhir baris
\n
tanpa\r
, pengkodean adalah UTF8 tanpa BOM.sumber
Racket 578 byte
Tidak Disatukan:
Pengujian:
Keluaran:
sumber
JavaScript (ES6 | FireFox), 286 byte
Penggunaan
padEnd
, yang khusus untuk FireFox.sumber
g('└┴┘')
setara dengang└┴┘
(dengan backticks setelahg
dan di akhir)?padEnd
tidak standar. Anda harus menentukan lingkungan eksekusi yang diperlukan.`foo`+bar+`baz`
- Anda dapat menyimpan byte dengan menggunakan templat`foo${bar}baz`
.JavaScript (ES6), 281 byte
Catatan: input sebagai string tunggal dengan baris baru - seperti yang diminta oleh OP. Jawaban lain menggunakan daftar string - menggunakan array string dalam input, saya dapat menghindari split pertama dan memotong 9 byte.
Kurang golf
Uji
sumber
Python 3, 318 byte
-3 byte untuk menggunakan
%
format dan -1 untuk menyingkatstr.join
Membutuhkan input yang dilampirkan dalam tanda kutip.
sumber
input()
hanya mengambil satu jalur pada setiap panggilan. Anda harus meneleponinput()
sampai tidak ada lagi saluran, atau membaca langsung daristdin
.C #, 696 Bytes
Golf:
Tidak digabungkan (dan lebih bagus, karena ^ itu tidak berguna bagi siapa pun):
Pengujian:
sumber
Is input using list or array of strings (and no newlines) valid? Nope.
Perl, 273 + 9 (
-CS -nlaF,
bendera) = 282 byteMenggunakan:
Cobalah di Ideone .
sumber
PHP, 313 byte
kerusakan
Uji di ideone
sumber
APL (Dyalog Extended) ,
3625 byte SBCSProgram lengkap. Diasumsikan itu
ABCDEFGHIJKLMNOPQRSTUVWXYZ
adalah file CSV. Mencetak ke stdout.Cobalah online!
⎕A
huruf besar A lphabet (terpendek-to-referensi built-in string)⎕CSV
membaca file dan mengkonversi dari CSV ke matriksm←
toko sebagaim
(untuk m atrix)1↓
menjatuhkan baris pertama⍉
transpose↓
dibagi menjadi daftar kolom↑¨
campuran masing-masing daftar string menjadi matriks(
...)⍪
susun berikut di atas itu:1↑m
ambil baris pertama darim
⌂disp
berlakudfns.disp
untuk itu (menggambar karakter menggambar garis)sumber