Tantangan:
Diberikan daftar string multi-line, tumpang tindih mereka (di kiri atas) dan output hasilnya.
Contoh:
Input: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Keluaran:
cbaa
bbaa
bbaa
aaaa
Aturan tantangan:
- Format input fleksibel. Anda diperbolehkan mendapatkan input sebagai daftar 2D garis (yaitu
[["aaaa","aaaa","aaaa","aaaa"],["bb","bb","bb"],["c"]]
) atau daftar karakter 3D (yaitu[[["a","a","a","a"],["a","a","a","a"],["a","a","a","a"],["a","a","a","a"]],[["b","b"],["b","b"],["b","b"]],[["c"]]]
). Anda diperbolehkan mengambil semua input satu per satu melalui STDIN. Dll - Format output sangat ketat. Anda dapat memilih untuk mencetak atau mengembalikan string multi-line. (Jika bahasa Anda tidak memiliki string, keluaran sebagai daftar karakter 2D diizinkan sebagai alternatif. Tetapi hanya jika bahasa Anda tidak memiliki string sama sekali.)
- Urutan daftar input tentu saja penting (tetapi Anda diizinkan untuk mengambil input secara terbalik jika Anda mau).
- Input hanya akan berisi ASCII yang dapat dicetak dalam kisaran unicode ( ).
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
- Input hanya akan berbentuk persegi panjang (jadi tidak ada bentuk aneh). Outputnya tidak perlu persegi panjang.
- Ruang trailing dan satu garis trailing tunggal diperbolehkan. Spasi terdepan dan / atau baris baru tidak.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Kasus uji:
Input: ["aaaa\naaaa\naaaa\naaaa","bb\nbb\nbb","c"]
Keluaran:
cbaa
bbaa
bbaa
aaaa
Input: ["12345\n54321","00\n00\n00\n00","001\n011\n012"]
Keluaran:
00145
01121
012
00
Input: ["sm\noo\nmr\nee\nt!\nh_\ni_\nn_\ng_","!@#$%^\n&*()_+\nqwerty\nuiopas","this\nis_a\ntest"]
Keluaran:
this%^
is_a_+
testty
uiopas
t!
h_
i_
n_
g_
Jawaban:
Jelly , 3 byte
Cobalah online!
Tidak menggunakan Jelly untuk sementara waktu, tetapi saya pikir tantangan dalam komentar itu bisa dikalahkan. Sangat langsung menggunakan logis dan (
a
) untuk melakukan operasi susun antara setiap elemen input (/
).Y
digunakan untuk mencetak dalam format yang diperlukan.sumber
ḷ""/Y
dengan daftar masukan terbalik. Bahkan tidak tahu tentanga
..JavaScript (Node.js) , 24 byte
Disimpan 2 byte berkat @Grimy
Mengasumsikan bahwa string yang dikembalikan dicetak pada terminal yang mendukung kode pelarian ANSI . Berisi karakter yang tidak patut dicetak ESC, yang lolos (tidak ada permainan kata-kata yang dimaksudkan) seperti di
\x1B
bawah ini.Ini tidak berfungsi pada TIO, tetapi Anda dapat mencobanya secara online! untuk melihat output mentah sebagai gantinya.
Bagaimana?
The urutan CSI digunakan adalah:
ED (Hapus pada Layar):
ESC[2J
di mana berarti "hapus seluruh layar"2
CUP (Posisi Kursor):
ESC[H
yang berarti "memindahkan kursor ke baris , kolom " din m mana dan dihilangkan dan secara implisit diatur ke (sudut kiri atas layar).n m 1
Contoh output
sumber
;
. Juga, saya pikir ini harus "JavaScript + terminal" atau sesuatu yang serupa yang tidak bersaing dengan JavaScript murni.if the last parameter sub-string(s) is empty, the separator preceding it may be omitted
. Karena hanya ada dua sub-string, pemisah sebelum substring terakhir adalah satu-satunya, dan dapat dihilangkan.\x1B[H
+ yang pertama diperlukan? Bukankah itu dimulai dari kiri atas secara default, dan Anda hanya perlu mengatur ulang setelah setiap input (yang merupakan gabungan dari apa)? Atau apakah awalnya dimulai di tempat lain secara default, dan Anda harus secara eksplisit membiarkannya dimulai pada posisi kursor agar berhasil mengatur ulang ke posisi itu di bergabung?f=a=>print(`\x1B[H`+a.join`\x1B[H`)
denganf(input_here)
akan menghasilkan output yang samaprint(f(input_here))
? Jadi saya tidak mengerti mengapa Anda tidak diizinkan untuk menghilangkanprint
dan hanya mengembalikan string.R ,
120,111110107 byteCobalah online!
Fungsi menerima daftar matriks karakter (input 3D diterima).
(seperti yang Anda ketahui dari jumlah byte, ini tidak mudah dilakukan di R ...)
sumber
array
sebagai gantinyamatrix
!ncol
(Anda dapat memindahkan untuk mendapatkannrow
).Python 2 , 88 byte
Cobalah online!
Penjelasan (dengan contoh):
Mengambil daftar 2D sebagai input.
Pertama daftar input di-zip, untuk mendapatkan baris dari setiap persegi panjang input (
map(None,l)
sama dengan zip terpanjang):Masing-masing baris ini kemudian difilter ke dihapus
None
s, dan zip lagi:Yang merupakan daftar karakter untuk setiap posisi dari hasil yang diinginkan. Daftar ini difilter lagi, dan yang terakhir diambil:
Terakhir, daftar yang dihasilkan digabungkan dan dicetak:
sumber
R,
10797 byteTampaknya tidak berfungsi di TIO, yang mungkin terkait dengan penggunaan
\r
karakter carriage return. Itu bekerja pada instalasi lokal saya R.Mengambil input sebagai daftar yang berisi vektor baris:
Lingkarkan di atas baris setiap persegi panjang, cetak carriage return setelah masing-masing, mulai ulang baris.
Jika kita sedikit meregangkan aturan, kita bisa mengecek panjang input dan hanya mengulang tanpa batas, mencetak sejumlah besar baris baru:
R, 85 byte
sumber
\r
, dan selamat datang kembali! Hanya sebuah catatan, saya pikir ini hanya berfungsi dalam sesi R interaktif (ketikainteractive()
mengembalikan true)rscript
dari commandline. Saya menduga itu adalah Windows / Linux, karena Windows menggunakan\r\n
untuk baris baru dan Linux\n
.APL (Dyalog Unicode) , 22 byte SBCS
Fungsi awalan tersembunyi anonim mengambil daftar array karakter 2D sebagai argumen. Cetakan.
Cobalah online!
Ini bekerja dengan membuat kanvas, lalu menambahkannya ke daftar blok, dan mengurangi (melipat) dengan fungsi yang menempatkan blok di sudut.
↑
campur blok 2D untuk membuat blok 3D ortogonal, gabungkan dengan spasi sesuai kebutuhan1⌷
ambil layer pertama⊂
lampirkan itu∘
lalu⌽,
tambahkan daftar blok yang dibalik(
...)
terapkan fungsi diam-diam berikut:{
...}/
kurangi menggunakan lambda anonim berikut:⊢⍵
dengan argumen yang tepat sebagai kanvas ...⍺@(
...)
ubah dengan unsur-unsur argumen kiri, ditempatkan pada indeks berikut:⍴⍺
bentuk argumen kiri⍳
yang ɩ ndices dari array bentuk yang⊃
mengungkapkan (karena pengurangan terlampir untuk mengurangi peringkat)sumber
Haskell, 66 byte
Input diambil sebagai daftar daftar string dalam urutan terbalik, misalnya untuk kasus tes pertama:
[["c"],["bb","bb","bb"],["aaaa","aaaa","aaaa","aaaa"]]
.Cobalah online!
sumber
05AB1E , 12 byte
Solusi python Port TFeld
2 byte disimpan berkat Grimy
Cobalah online!
Penjelasan
Alternatif versi 14 byte
Cobalah online!
Penjelasan
sumber
--no-lazy
adalah perbaikan untuk tetap menggunakan peta / filter dengan cetak untuk implisity
, untuk menyimpan byte dibandingkan denganvy...,
:) Saya tahu itu bekerja di versi lama, tetapi dalam versi baru itu juga akan menampilkan[...]
. Tidak tahu itu karena kurangnya--no-lazy
. ;) Adapun jawabannya sendiri, sangat bagus! Saya tahu pengurangan kumulatif diperlukan, tetapi tidak bisa benar-benar berhasil ketika saya mencobanya sendiri. Anda membuatnya terlihat sangat mudah ..õζεõK
bisaζεðK
,õζõδK
bisaζðδK
.Kanvas , 5 byte
Coba di sini!
Jika tumpang tindih
/
+\
→X
,-
+|
→+
, dll. Akan baik-baik saja, 2 byte akan berfungsi.sumber
Python 2 , 77 byte
Cobalah online!
sumber
PowerShell 6 , konsol saja, 20 byte
berdasarkan jawaban Arnauld . Ini hanya berfungsi dengan konsol dan tidak bekerja pada TIO.
Cobalah online!
PowerShell , 103 byte
Cobalah online!
Belum dibuka:
sumber
C # (.NET Core) , 68 + 23 = 91 byte
23 byte untuk impor,
using C=System.Console;
Tidak berfungsi di TIO, karena itu bukan konsol.
Cobalah online!
sumber
Ruby , 67 byte
Input adalah daftar baris. Buat daftar garis dan timpa saat melewati input, kemudian gabungkan dengan baris baru (diwakili oleh variabel
$/
) di akhir agar sesuai dengan output yang ketat.Cobalah online!
sumber
C (GCC, MinGW) 138 byte
Asumsikan bahwa CR menempatkan kursor pada awal baris saat ini.
Diuji dengan:
sumber
Oktaf ,
7167 byteFungsi yang mengambil array sel vertikal matriks char, dan mengembalikan matriks char.
Cobalah online! Atau verifikasi semua kasus uji .
sumber
Javascript (browser) ,
216208204 byteUsaha saya dalam hal ini. Saya tidak senang dengan ukurannya, dan pastinya ada lebih banyak untuk perbaikan, tapi saya tidak berpengalaman dalam bermain golf.
Ngomong - ngomong , apa yang dilakukannya pertama-tama adalah membagi semua string, lalu membalikkan semua string, lalu sambil melakukan looping pada operasi pengurangan. Mulailah semua string. Kemudian balikkan semua string lagi dan kemudian gabungkan kembali dengan baris baru.
Terima kasih khusus kepada Kevin Cruijssen untuk mengingatkan saya bahwa bagian terakhir dalam for loop terjadi di akhir dan penghematan total byte 8 byte.
sumber
('')
bisa menjadi dua `untuk menghemat empat byte :)for(i=0;i<b.length;i++){j=a[i];if(!j)j=b[i];a[i]=b[i].padStart(j.length,j)}
denganfor(i=0;i<b.length;a[i]=b[i++].padStart(j.length,j))if(!(j=a[i]))j=b[i];
.j
pertama ditugaskan dengan(j=a[i])
, maka jika-pernyataan dilakukan denganif(!...)j=b[i];
(di mana...
adalah(j=a[i])
, sehingga nilai diperbaruij
), dan kemudian;a[i]=b[i++].padStart(j.length,j))
dilakukan pada akhir untuk loop iterasi .. Tidak yakin di mana masalahnya, dan sepertinya berhasil?C (gcc) ,
5147 byteCobalah online!
-4 bytes berkat ceilingcat.
Menggunakan urutan CSI untuk menyimpan / mengembalikan posisi kursor. Ulangi saja larik string yang diteruskan (dalam format yang sama dengan
argv
) dan cetak<save position>string<restore position>
untuk masing-masing.Ini tidak meninggalkan kursor di kiri atas, jadi ketika berjalan di terminal itu penting untuk meninggalkan cukup baris baru setelah itu sehingga prompt tidak mengganggu input.
sumber
Japt
-P
, 7 byteMengambil input sebagai array string multi-line, menghasilkan string multi-line tunggal.
Cobalah
sumber
Permintaan T-SQL,
297295 byteMenggunakan ¶ sebagai pemisah dan variabel tabel sebagai input.
Cobalah online
sumber
Javascript (browser),
129124 byteUpaya pertama saya di golf kode. Saya membaca tautan yang diberikan dalam aturan (celah, aturan standar ...), jadi saya harap saya melakukan kesalahan!
Saya menyimpan input karena berada di pos pertama (bentuk array datar).
Terima kasih kepada Kevin Cruijssen karena telah menghemat 5 byte.
Tes:
Tampilkan cuplikan kode
sumber
for(a of o){for(l in a){b=a[l],r[l]=(r[l])?b+r[l].slice(b.length):b}}
bisafor(a of o)for(l in a)b=a[l],r[l]=r[l]?b+r[l].slice(b.length):b;
:)=(r[l])?
mana dapat dihapus ke=r[l]?
:)r
. Tanpa itu, hasil pemetaan akan dikembalikan sebagai gantinya.Pyth , 18 byte
Cobalah online! (catatan: kode itu sendiri hanya mengevaluasi satu blok, mode test suite penerjemah menjalankan program satu kali untuk setiap baris input)
Berdasarkan solusi TFeld's Python 2 .
Penjelasan:
untuk penjelasan mengapa algoritma itu sendiri bekerja, lihat jawaban TFeld.
sumber
Arang , 4 byte
Cobalah online (verbose) atau coba online (murni) .
Penjelasan:
Ulangi daftar input string multi-baris:
Dan cetak string multi-line tanpa memindahkan kursor:
sumber