Berikut cara backspace-dan-mengetik ulang dari satu string ke yang lain:
- Mulai dari string pertama.
- Hapus karakter di bagian akhir hingga hasilnya adalah awalan dari string kedua. (Ini mungkin mengambil 0 langkah.)
- Tambahkan karakter di akhir hingga hasilnya sama dengan string kedua. (Ini mungkin mengambil 0 langkah juga.)
Misalnya, jalur dari fooabc
ke fooxyz
terlihat seperti:
fooabc
fooab
fooa
foo
foox
fooxy
fooxyz
Tugas
Diberikan daftar kata-kata, tulis sebuah program yang mundur-dan-mengetik ulang jalannya dari string kosong, ke semua kata dalam daftar berturut-turut, kembali ke string kosong. Keluarkan semua string perantara.
Misalnya, mengingat daftar input ["abc", "abd", "aefg", "h"]
, output harus:
a
ab
abc
ab
abd
ab
a
ae
aef
aefg
aef
ae
a
h
Aturan
Anda dapat mengembalikan atau mencetak daftar string, atau string tunggal dengan beberapa pembatas pilihan. Anda dapat secara opsional menyertakan string kosong awal dan akhir. Input dijamin mengandung setidaknya satu kata, dan setiap kata dijamin hanya mengandung huruf ASCII huruf kecil ( a
- z
). Sunting: string berturut-turut dalam input dijamin tidak sama satu sama lain.
Ini adalah kode-golf ; kode terpendek dalam byte menang.
Implementasi referensi di Python 3: Cobalah online!
["abc","abc"]
?a,abc,abcde,abc,a,abc,abcde
Jawaban:
Pyth,
2523 byteCobalah online.
sumber
Perl, 43 byte
42 byte kode +
-n
bendera.Untuk menjalankannya:
sumber
abc
menyebabkannya dicetak 3 kali (tapi sebenarnya, pertama dan ketiga kali itu tanpa spasi). Saya menghapusnya.Java 8, 144 byte
Yang ini mirip dengan implementasi referensi tetapi menggabungkan dua
while
loop. Ini adalah ekspresi lambda yang menerimaString[]
parameter.Tidak disatukan
Ucapan Terima Kasih
sumber
class B
bukaninterface B
? Anda dapat menjalankan dari kelas paket-pribadi. Juga, pertimbangkan untuk menggunakan lambda karena Anda telah menentukan Java8.interface B{static void main
lebih pendek dariclass B{public static void main
.a->{/*your code*/}
, yang akan menetapkan ke variabel tipejava.util.function.Consumer<String[]>
. Namun, saya tidak dapat menguji saat ini.Mathematica, 149 byte
sumber
Retina , 39 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online!
Input dan output adalah daftar yang dipisahkan oleh linefeed. Output tidak termasuk string kosong terkemuka dan tertinggal.
sumber
Jelly ,
312926 byteCobalah online!
Bagaimana itu bekerja
sumber
Haskell ,
102 93 9190 byteBaris terakhir adalah fungsi anonim, yang mengambil dan mengembalikan daftar string. Cobalah online!
Penjelasan
Solusi saya bersifat rekursif. Pertama,
?
adalah fungsi helper infix:a?b
memberikanlength a
karakter pertamab
, atau keseluruhanb
jikaa
lebih panjang. Selanjutnya saya mendefinisikan fungsi infiks!
. Idenya adalah bahwaa!x
, di manaa
string danx
daftar string, menghasilkan jalur daria
ke string pertamax
dan berulang ke ekorx
. Pada baris terakhir saya mendefinisikan fungsi anonim yang menambahkan string kosong, lalu berlaku!
untuk string kosong dan input.Penjelasan tentang
!
:sumber
Python 2,
118107103979392 byteInput diberikan sebagai
['abc', 'abcdef', 'abcfed']
, atau sebagai ["abc", "abcdef", "abcfed"]
.Revisi 1: -11 byte. Kredit diberikan kepada @xnor untuk posnya tentang kiat golf Python, dan @Lynn karena menemukan tip untuk saya, dan bagi saya karena pintar. Dua perubahan dilakukan: Alih-alih
not s.startswith(i)
, saya menggunakans.find(i)
, dan bukannyai!=s
saya menggunakani>s
.Revisi 2: -4 byte. Penghargaan bagi saya menyadari saya membuat kesalahan yang sangat bodoh. Alih-alih menggunakan indentasi tab tunggal dan tab ganda, saya menggunakan indentasi spasi tunggal dan tab tunggal.
Revisi 3: -6 byte. Credit pergi ke @ mbomb007 karena menyarankan untuk menempatkan whiles pada satu baris. Saya juga memperbaiki bug dengan mengubah
s.find(i)
kei.find(s)
.Revisi 4: -4 byte. Kredit pergi ke @ xnor karena menyadari bahwa saya tidak perlu menyimpan input dalam suatu variabel.
Revisi 5: -1 byte. Kredit diberikan kepada saya karena menyadari bahwa itu
['']
adalah hal yang sama seperti[s]
ketika menambahkannya ke input.sumber
while
masing-masing pada satu baris. Selain itu, Anda dapat menggunakannya<1
sebagai gantinyanot
.startswith
.while
s pada satu baris. Maksud Anda sukawhile s.find(i):s=s[:-1];print s
? Juga, terima kasih atas sarannya<1
, tetapi saya telah mengubah sesuatu yang lebih singkat berkat salah satu tips xnor pada utas tips Python.GNU M4, 228 atau 232 bytes¹
(¹ tergantung pada apakah akan mengakhiri file dengan
dnl\n
atau tidak — saya masih baru untuk bermain golf dan M4)Selain itu, 3 byte dapat disimpan dengan mengganti argumen kedua
substr
dari0
ke string kosong, tetapi itu akan menghasilkan banyak peringatan di stderr.Tidak Disatukan:
Pemakaian:
sumber
PHP,
11611110183 byteCatatan: menggunakan pengkodean Windows-1252.
Jalankan seperti ini:
Penjelasan
Tweaks
trim($c^$w,"\0")
untuk memeriksa kecocokan substrat alih-alih$c&&strpos($w,$c)!==0
.~ÿ
untuk menghasilkan string dengan byte NUL, bukan"\0"
$c=$c.ÿ&$w
suffix$c
dengan karakter selanjutnya$w
sumber
Batch,
296291 byteMenghitung awalan umum itu rumit.
sumber
PHP, 153 byte
sangat lama :(
Jalankan dengan
php -nr '<ode>' <text1> <text2> ...
.sumber
JavaScript (ES6), 135 byte
Tantangan yang menarik! Penggunaan:
g(["abc", "abd", "aefg", "h"])
. Saya tidak bisa menyimpan byte dengan menulis ini sebagai satu fungsi, jadi ini dua. Baris baru tidak termasuk dalam jumlah byte.Saya yakin ini bisa dikurangi lebih banyak. Akan menambahkan versi yang tidak diklik nanti.
sumber
Javascript, 98 byte
Port Java Jakob menjawab
sumber