Diberikan input dari dua string dengan urutan garis bawah yang mewakili kata-kata yang sesuai, output kalimat dengan "kosong" diisi.
Cara terbaik untuk menggambarkan tantangan ini adalah dengan contoh. Berikut ini contoh input:
programming _____________ and code golf
programming puzzles ______ code ____
Dan inilah output yang sesuai:
programming ___puzzles___ and code golf
programming puzzles _and__ code golf
Untuk keperluan tantangan ini, "kata" didefinisikan sebagai urutan satu atau lebih huruf kecil, dan "kosong" didefinisikan sebagai satu atau lebih garis bawah (input akan selalu hanya berisi huruf kecil, spasi, dan garis bawah) . Kata dan blank dalam string input dipisahkan oleh spasi tunggal, dan jumlah dari jumlah kata dan blank dalam kalimat akan selalu sama.
Tujuan dari tantangan ini adalah untuk mengisi semua bagian yang kosong dengan kata-kata yang benar , yang merupakan kata-kata yang menempati indeks yang sama di string lain ketika dibagi dengan spasi.
Kata harus dipusatkan di tempat kosong, seperti yang ditunjukkan dengan kata "puzzle" dalam contoh di atas — jumlah garis bawah yang sama tetap berada di kedua sisi.
Jika kata tidak dapat tepat berada di tengah, garis bawah ekstra dapat mengarah ke kiri atau kanan (mis. Kata "dan" pada contoh di atas).
Akan selalu ada garis bawah yang cukup untuk kata yang pas, tetapi mungkin ada persis sebanyak panjang kata (mis. Kata "golf" pada contoh di atas).
Tidak akan pernah ada posisi kosong di posisi yang sama di kedua string.
Input / output mungkin salah satu dari yang berikut ini (input / output tidak harus melalui metode yang sama):
string tunggal yang dipisahkan oleh karakter apa pun yang tidak alfabet, spasi, atau garis bawah (mis. baris baru atau string yang dipisahkan koma)
sebuah array / daftar / etc. dari dua string
dua argumen fungsi / perintah (hanya input)
Karena ini adalah kode-golf , kode terpendek dalam byte akan menang.
Contoh di atas dapat digunakan sebagai test case. Ini adalah test case yang lebih besar (string kedua dalam output mungkin sedikit berbeda karena perilaku pemusatan yang berbeda):
lorem _____ dolor _____ amet _______________ adipiscing elit mauris dapibus tincidunt _____________________________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum ______ sit _______ consectetur _______________ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem ____________________________ dictum
lorem ipsum dolor _sit_ amet __consectetur__ adipiscing elit mauris dapibus tincidunt ____________metus____________ accumsan fringilla proin vulputate viverra lorem fermentum dictum
lorem ipsum dolor_ sit _amet__ consectetur __adipiscing___ elit mauris dapibus tincidunt metus accumsan fringilla proin vulputate viverra lorem _________fermentum__________ dictum
Jawaban:
Pyth, 30
Mengambil input dan output sebagai daftar dua string. Menggunakan pendekatan split-zip-double map-center-zip-join yang cukup mendasar.
Coba di sini
Diperluas:
Saya akan menjelaskan lebih banyak setelah saya benar-benar puas bahwa saya tidak bisa bermain golf ini lagi, meskipun harus cukup jelas, mengingat di mana-mana pendekatan split-zip-double map-center-zip-join dan sebagainya.
sumber
Retina ,
1021009388 byteHitungan byte mengasumsikan penyandian ISO 8859-1.
String akan dipisahkan oleh umpan baris. Jika ada jumlah garis bawah ganjil yang tersisa, yang asing akan menjadi setelah kata.
Cobalah online!
Penjelasan
Saya kira ini adalah "pendekatan duplikat-append-lookback-match-add-center", atau sesuatu yang dekat ...
Kami mulai dengan menduplikasi input (dipisahkan dengan a
!
dan linefeed). Tujuannya adalah agar kita dapat memproses kedua baris dengan mengambil kata dari baris berikutnya (alih-alih harus memperlakukan baris kedua secara terpisah).Ini mengawali kata yang benar untuk setiap celah. Kami mulai dengan menghitung posisi kata saat ini dengan tampilan di belakang
(?<=^(\w+ )*)
(posisi disimpan sebagai kedalaman grup1
). Kemudian lookahead a) memastikan bahwa kita berada di awal celah dengan mencocokkan_
, lalu melompat ke baris berikutnya dengan.*¶
, mencocokkan jumlah kata yang tepat dengan(?<-1>\w+ )*
untuk sampai ke posisi yang tepat, dan kemudian mencocokkan kata yang ditemukan di sana dengan(\w+)
ke grup2
.Tahap ini melakukan tiga hal:
2
dengan([a-z])+
dan kemudian mencocokkan banyak garis bawah (yang tidak pernah ditulis kembali).(_*)\3
dan menulis$3$1$3
kembali.!\D+
dan menggantinya dengan apa pun.sumber
Python 2, 109
Fungsi mengambil dua string sebagai argumen dan mencetak output seperti pada contoh. Ini menggunakan pendekatan yang membosankan, dengan
str.center(width, fillchar)
melakukan sebagian besar pekerjaan.Cobalah online .
sumber
z
, kecuali jika saya melewatkan sesuatu Anda hanya dapat melakukan swap setelah cetak dan inlinez
.Ruby,
111109 karakterInput: array 2 string; output: array 2 string.
Contoh dijalankan:
sumber
JavaScript,
194185 byteMengambil dua string sebagai parameter dan menghasilkan dua string sebagai array / daftar
Tampilkan cuplikan kode
sumber
Mathematica 223
Harus ada cara yang lebih singkat untuk melakukan ini.
Contoh dijalankan
sumber
Gema,
208203 karakterHanya karena Gema memiliki fungsi yang sempurna untuk tugas ini: .
@fill-center{background;value}
Input: 2 baris yang dipisahkan baris baru (tidak ada baris baru final); output: 2 baris yang dipisahkan oleh baris baru (dengan spasi tambahan - tampaknya tidak dilarang).
Contoh dijalankan:
sumber
C, 197 byte
Keluaran
sumber
ES6, 122 byte
Mengambil array dari dua string sebagai parameter tunggal dan mengembalikan array lain dari dua string.
sumber