Inspirasi. * Saya tidak percaya kami belum pernah menghadapi tantangan ini sebelumnya:
Tugas
Diberikan satu atau lebih string ASCII yang dapat dicetak, interleave mereka dengan mengambil satu karakter dari setiap string, secara siklis hingga keluar dari karakter. Jika string kehabisan karakter sebelum yang lain, lewati saja karakter itu sejak saat itu.
Contohnya
SIMPLE
memberi SIMPLE
POLLS
dan EPEES
memberiPEOPLELESS
LYES
dan APRONS
memberiLAYPERSONS
ABCDE
dan a c
dan 123 567
memberiAa1B 2Cc3D E567
"\n$?*
dan
(string kosong) dan ,(.)"
(spasi tambahan) memberi ",\(n.$)?"*
(spasi tambahan)
* Ada solusi APL yang lebih pendek.
Jawaban:
Jelly , 1 byte
Cobalah online!
Built-in "transpose" akan melakukan ini pada daftar string.
sumber
z⁶
.z
adalah "transpos kiri, padding dengan kanan";⁶
adalah sebuah ruang.;"
( gabungan elemen-bijaksana) akan menyelesaikan tugas tanpa built-in.Python 2,
101898669 byteSaya berharap saya bisa mendapatkan ini menjadi lambda entah bagaimana, memperpendeknya dengan membuatnya menjadi rekursif.Ini tidak ideal karena Anda berharap transposing lebih pendek, sayangnya itu tidak (dari apa yang saya berhasil sampai sejauh ini).Solusi lama:
lambda s:''.join(''.join([c,''][c<' ']for c in x)for x in map(None,*[list(y)for y in s]))
terima kasih kepada mathmandan karena membuat saya merasa bodoh;) menyelamatkan saya banyak byte! (pada solusi lama)
sumber
while any(w):
? String kosong adalah falsey dalam Python.f=
.[]
melepas panggilan rekursif, pergif(x[1:] for x in s)
, yang membuatnya menjadi pemahaman generator, yang bertindak sama dengan daftar dalam konteks ini.Perl 6 ,
3432 byteSebuah lambda yang menggunakan array string sebagai argumen, dan mengembalikan sebuah string.
( Coba online )
sumber
@_
sebagai gantinya$_
CJam , 4 byte
Cobalah online!
Kami juga dapat menulis fungsi tanpa nama untuk 4 byte, yang mengharapkan daftar string di atas tumpukan:
Cobalah online!
sumber
Pyth - 3 byte
Sangat sederhana, akan menambah ekspansi nanti, di ponsel.
Test Suite
sumber
JavaScript (ES6),
5246 byteMengambil input sebagai array string dan output sebagai string tunggal.
Cuplikan tes
sumber
f=([[c,...s],...a])=>c?c+f([...a,s]):a+a&&f(a)
Haskell, 33 byte
Cobalah di Ideone. Pemakaian:
Tanpa menggunakan built-in: (
3834 bytes)Cobalah di Ideone. 4 byte off berkat Zgarb! Pemakaian:
sumber
f a=a
untuk menyimpan byte karena keduanya[]
memiliki tipe yang berbeda ... sangat dekat.C,
11484 byte-20 byte untuk tidak menghitung panjangnya.
Menerima array char pointer dan membutuhkan item terakhir menjadi null-pointer (lihat penggunaan).
Tidak digabungkan dan digunakan:
sumber
malloc
danreturn
sebelumnya dan ini lebih lama dari sekadar mencetakPHP,
6867 byteLoop atas argumen baris perintah. Jalankan dengan
-r
.Setelah loop dalam,
$f
adalah1
ketika semua string selesai, yang0
lain (bitwise&
cast""==$c
ke int).Iterasi berikutnya dari loop luar: salin
$f
ke$k
(menyimpan satu byte dari$k=0
) dan beralih$f
:Ketika semua string selesai,
$f
sekarangfalse
dan loop rusak.sumber
Retina , 13 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
Penjelasan
Ini didasarkan pada teknik transposisi standar di Retina. Kami mengurutkan (
O
) semua karakter non-linefeed (.
), dengan ($#
) jumlah karakter di depannya pada baris yang sama ($.%`
), yaitu posisi horizontal mereka.Tahap kedua kemudian cukup menghapus umpan baris dari input.
sumber
Jawa,
19 + 155 = 174160Tidak Disatukan:
Keluaran:
Modifikasi pertama: deklarasi string digabungkan untuk menyimpan beberapa byte. Dihapus
import
, itu digunakan olehmain()
metode (tidak ditampilkan di sini) yang juga diperlukanLinkedList
. Ini lebih sedikit byte untuk dirujukQueue
secara langsung.sumber
String f(java.util.Queue<String>q){String s,r="";for(;!q.isEmpty();r+=s.isEmpty()?"":s.charAt(0))if((s=q.poll()).length()>1)q.add(s.substring(1));return r;}
PHP, 77 byte
Golf
Fungsi anonim yang mengambil array string.
Saya yakin ini bisa bermain golf lebih banyak, tapi ini masih awal. Pada setiap iterasi, kami mengambil huruf ke-i dari setiap string yang diberikan dan menambahkannya ke string terakhir kami, satu per satu. PHP hanya memberikan peringatan jika kita mengakses bit dari string yang tidak ada, jadi tidak masalah. Kami hanya berhenti ketika tidak ada perubahan yang dilakukan setelah mengulang semua string sekali.
Saya merasa penggunaannya
$d
bisa lebih banyak bermain golf, tapi ini masih awal. : Psumber
Sebenarnya ,
76 byteSelamat datang saran bermain golf! Cobalah online!
Sunting: -1 byte berkat Teal pelican.
Tidak melakukanolf
sumber
Z♂#Σ
keZ♂Σ
dalam semua mereka. Terima kasih atas tipnya: DJavaScript (ES6), 46 byte
sumber
Python 2 , 58 byte
Cobalah online!
sumber
lambda *m
?J , 13 byte
Cobalah online!
Berdasarkan inspirasi untuk pertanyaan ini.
Cara lain untuk melakukannya membutuhkan 27 byte tetapi beroperasi menggunakan transpose. Sebagian besar byte adalah untuk menangani nol yang ditambahkan secara otomatis dari padding.
Penjelasan
sumber
Utilitas Bash + GNU, 55
I / O via STDIN (dipisahkan jalur) dan STDOUT.
The
sed
format setiap baris ke substitusi proses pesta . Ini kemudianeval
dieditpaste
untuk melakukan interleaving yang sebenarnya.tr
lalu hapus baris dan tab baru yang tidak perlu.Ideone.
sumber
PHP, 63 byte
Catatan: menggunakan pengkodean IBM-850
Jalankan seperti ini:
Penjelasan
sumber
~■
(biner 254) bukan"\x1"
(biner 1).$$
!Python 3, 75 Bytes
Saya tahu yang lain Python lebih pendek, tapi ini adalah pertama kalinya saya pernah menggunakan
map
dalam hidup saya jadi saya cukup bangga karenanyasumber
C,
7571 byteSatu-satunya batasan adalah panjang output. Saat ini 99, tetapi dapat dengan mudah diregangkan ke 999 (+1 byte).
Tidak Disatukan:
sumber
Oracle SQL, 195 byte
Mengambil inputnya dari tabel
i
dengan koloma
(berisi string) dano
(urutan string):Penjelasan:
Kami mengeksploitasi
CONNECT BY
untuk memecah string menjadi masing-masing karakter yang membuatnya.PRIOR SYS_GUID()
sedangNOT NULL
memastikan kita tidak terjebak dalam satu lingkaran.Kami kemudian menggabungkan karakter tunggal dengan
LISTAGG
tetapi kami mengocoknya denganORDER BY
klausa, memesannya terlebih dahulu dengan posisi mereka di string asli dan hanya kemudian oleh string mereka berasal.Tidak sesingkat jawaban yang lain tetapi SQL tidak benar-benar dimaksudkan sebagai bahasa manipulasi string :)
sumber
Python 2,
12896Saya berharap tidak harus menggunakan itertools
Tidak disatukan
sumber
Perl 5 , 28 byte
26 byte kode + 2 untuk
-0n
.Cobalah online!
sumber
R , 73 byte
Cobalah online!
Penjelasan: sangat sederhana (tetapi verbose), hanya loop melalui pencetakan
i
karakterj
th th string. Untungnya,substr
mengembalikan string kosong jika diberi input di luar jangkauan.sumber
Python, 112 byte
sumber
x
dany
dari mana?Perl 5 , 53 byte
Cobalah online!
metode
Membuat array dua dimensi di mana jumlah baris sama dengan panjang string terpanjang dan jumlah maksimum kolom sama dengan jumlah string. Kemudian output setiap baris array tanpa spasi.
sumber
TXR Lisp , 20 byte
Menjalankan:
The
weave
fungsi malas, sehingga mengembalikan daftar, itulah sebabnya mengapa kita harus memaksa hasilnya ke string. Menjadi malas, itu dapat menenun urutan yang tak terbatas. Sebagai contoh, kita dapat menenun bilangan alami genap dan ganjil, yang merupakan daftar malas tak terbatas:sumber
K (oK) ,
3529 byteLarutan:
Cobalah online!
Contoh:
Penjelasan:
Gunakan pengindeksan tingkat 2 untuk mengeluarkan indeks dari 0 hingga maks (panjang daftar rata) di semua daftar input. Pengindeksan apa pun di luar batas sub-daftar akan menghasilkan nol. Balik (putar 90), ratakan, lalu tarik hasil yang bukan nol.
Catatan:
i$
) sehingga kita mendapatkan null yang berguna, sebagai spasi () dianggap null untuk daftar char yang berarti Anda tidak bisa memberi tahu nol dari spasi yang valid.
sumber
Jq 1,5 , 49 byte
Penjelasan
Contoh Jalankan
Cobalah online
sumber