Ini adalah pertanyaan codegolf pertama saya, jadi saya minta maaf sebelumnya jika itu tidak sesuai, dan saya menyambut umpan balik.
Saya punya file dengan format ini:
a | rest of first line
b | rest of second line
b | rest of third line
c | rest of fourth line
d | rest of fifth line
d | rest of sixth line
Isi sebenarnya bervariasi, seperti halnya pembatas. Isinya hanya teks. Pembatas hanya muncul sekali per baris. Untuk teka-teki ini, jangan ragu untuk mengubah pembatas, mis. Gunakan "%" sebagai pembatas.
Output yang diinginkan:
a | rest of first line
b | rest of second line % rest of third line
c | rest of fourth line
d | rest of fifth line % rest of sixth line
Saya sudah memiliki skrip ruby dan awk untuk menggabungkan ini, tetapi saya curiga mungkin saja memiliki oneliner pendek. yaitu satu-liner yang dapat digunakan bersama dengan pipa dan perintah lainnya pada baris perintah. Saya tidak bisa mengetahuinya, dan skrip saya sendiri terlalu panjang untuk hanya mengompres pada baris perintah.
Lebih disukai karakter terpendek. Input tidak harus diurutkan, tetapi kami hanya tertarik untuk menggabungkan garis berurutan dengan bidang pertama yang cocok. Ada garis tak terbatas dengan bidang pertama yang cocok. Field 1 bisa berupa apa saja, misalnya nama buah, nama yang tepat, dll.
(Saya menjalankan MacOS, jadi saya pribadi paling tertarik dengan implementasi yang berjalan di mac).
Berikut ini adalah contoh / tes kedua. Perhatikan "|" adalah pembatas. Ruang sebelum "|" tidak relevan, dan jika membenci harus dianggap bagian dari kunci. Saya menggunakan "%" sebagai pembatas dalam output, tapi sekali lagi, jangan ragu untuk mengubah pembatas (tapi jangan menggunakan tanda kurung siku).
Memasukkan:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination
whom|[possessive] whose
whom|[subjective] who
whoever|[objective] whomever
whoever|[possessive] whosever
who|[possessive] whose
who|[objective] whom
Output yang diinginkan:
why|[may express] surprise, reluctance, impatience, annoyance, indignation
whom|[used in] questions, subordination%[possessive] whose%[subjective] who
whoever|[objective] whomever%[possessive] whosever
who|[possessive] whose%[objective] whom
sumber
["A|some text", "B|other text", "A|yet some other text"]
bukan input yang diinginkan untuk diuji, karena kata kunci untukA
tidak satu demi satu dalam daftar.Jawaban:
Retina , 17 byte
Mencetak dalam byte disandikan ISO 8859-1.
Menggunakan
;
bukan|
sebagai pemisah field input.Cobalah online.
sumber
V ,
1613 byteCobalah online!
Kamu berkata
Jadi saya memilih
|
sebagai pembatas. Jika ini tidak valid, beri tahu saya dan saya akan mengubahnya.Penjelasan:
sumber
Perl
-0n
, 2 + 43 = 45 byteDemo:
sumber
SQL (PostgreSQL),
4372 byteIni mengambil keuntungan dari fungsi agregat string_agg yang berguna di PostgreSQL. Input berasal dari tabel yang disebut
T
dengan 2 kolomA
danB
. Untuk memenuhi pertanyaan dengan lebih baik saya telah memasukkan perintah untuk memuat data dari file ke dalam tabel. File ituT
juga. Saya belum menghitung tabel buat pernyataan.Outputnya akan di-unordered, tetapi jika itu merupakan masalah maka bisa diperbaiki dengan
ORDER BY A
SQLFiddle tidak ingin bermain untuk saya, tetapi ini adalah apa yang saya dapatkan di pengaturan saya.
sumber
C, 127 byte
Bekerja dengan gcc. Pembatas berubah menjadi
/
. Mengambil input dari stdin dan menulis output ke stdout, jadi panggil dengan redirection input./a.out <filename
Tidak Disatukan:
sumber
Pyth - 15 byte
Membuat beberapa asumsi tentang masalah, akan berubah ketika OP mengklarifikasi.
Cobalah online di sini .
sumber
Python 3 - 146 Bytes
Input adalah nama file atau path file dari file, output ke stdout. Bisa jadi jauh lebih pendek jika saya bisa mengambil input sebagai teks mentah dari baris perintahMembawa input dari stdin dan output ke stdin. Setup dengan pemisah
"|"
. Untuk menguji input contoh pertama, gunakan pemisah" | "
sumber
Java 7, 167 byte
Mungkin bisa bermain golf lebih banyak dengan menggunakan pendekatan yang berbeda ..
CATATAN: Metode di atas membuat dan mengembalikan a
HashMap
dengan pasangan nilai kunci yang diinginkan. Namun, itu tidak mencetaknya dalam output yang tepat seperti dalam pertanyaan OP dengan|
sebagai pembatas-output antara kunci dan nilai-nilai baru. Dilihat oleh jawaban SQL MickeyT di mana ia mengembalikan tabel database saya pikir ini diperbolehkan; jika tidak lebih banyak byte harus ditambahkan untuk fungsi cetak.Tidak digabungkan & kode uji:
Keluaran:
sumber
PowerShell, 85 byte
String digabung menggunakan hashtable:
Contoh
Karena PowerShell tidak mendukung pengalihan stdin via
<
, saya berasumsi ituGet-Content .\Filename.txt |
akan digunakan sebagai metode I / O default.Keluaran
sumber
APL, 42 karakter
sumber
⌸
bukan satu byte dalam pengkodean APL.Sed, 55 byte
Uji coba:
sumber
q / kdb +, 46 byte
Larutan:
Contoh:
Penjelasan:
sumber