biarkan S
, a
dan b
masing - masing mewakili string
Sasaran: Menulis fungsi penggantian string standar di mana Anda mengganti semua kemunculan a
dalam string S
dengan b
selama a
belum menjadi bagian dari instance darib
misalnya, jika kita memiliki string S
=My oh my that there is a big ol' that
dan kami ingin melakukan penggantian yang bagus a = that
dan b = that there
kami akan mengganti setiap instance that
dengan that there
selama instance that
belum menjadi instancethat there
Jadi dalam hal ini hasilnya adalah: My oh my that there is a big ol' that there
Yang pertama that
tidak diganti karena sudah menjadi bagian dari contohthat there
Catatan
Ketiga input harus berupa string yang hanya berisi karakter ascii yang dapat dicetak
Input dapat diberikan sebagai 3 string terpisah atau daftar 3 string
Masukan akan berada di urutan
S
,a
,b
kecuali ditentukan lain dalam jawabanAgar
a
dapat dianggap sebagai bagian darib
, semua instancea
harus menjadi bagian dari instanceb
Beberapa Kasus Pojok Dijelaskan
Input: ["1222", "22", "122"]
Output: "12122"
Dalam contoh di atas contoh yang terakhir 22
diganti. Meskipun bagian dari itu adalah bagian dari contoh b
, keseluruhannya BUKAN bagian dari contoh b
. Karena seluruh instance a
bukan bagian dari instance b
diganti
Input: ["123 ", "23", "12"]
Output: "112 "
Kasus uji ini menggambarkan kasus yang sama seperti di atas tetapi mungkin dengan cara yang sedikit lebih jelas. Lagi-lagi yang 2
di tengah adalah bagian dari instance a
maupun bagian dari instance b
, namun karena semua a
bukan bagian dari instance b
yang masih diganti.
Input: ["Empty", "", "p"]
Output: "pEpmptpyp"
Dalam kasus uji di atas baik string kosong sebelum dan sesudah p
tidak diganti karena sepenuhnya dapat dianggap sebagai bagian dari contoh p
.
Kasus Uji Lainnya
Input: ["aabbaa", "aa", "aabb"]
Output: "aabbaabb"
Input: ["Hello World!", "o", " no"]
Output: "Hell no W norld!"
Input: ["Wow, oh wow, seriously WOW that's... wow", "wow", "WOW,"]
Output: "Wow, oh WOW,, seriously WOW that's... WOW,"
Input: ["Empty", "", "b"]
Output: "bEbmbpbtbyb"
Input: ["Empty", "b", "br"]
Output: "Empty"
Input: ["Empty", "pty", "Empty"]
Output: "Empty"
Input: ["aabbaaa", "aa", "PP"]
Output: "PPbbPPa"
Input: ["121212","1","121"]
Output: "121212"
Ini adalah pertanyaan untuk kode-golf sehingga jawaban tersingkat dalam byte menang.
Jawaban:
Perl 6 , 76 byte
Cobalah online!
Blok kode anonim yang memerlukan input kari, seperti
f(a,b)(s)
.Saya cukup yakin ini cocok dengan maksud pertanyaan. Pada dasarnya, itu hanya membuat penggantian jika posisi
a
tidak dalam salah satu pertandingan yang tumpang tindihb
.sumber
pEpmpptpyp
bukannyapEpmptpyp
1222
,22
,122
] ->12122
. Saya telah memperbarui pertanyaan untuk mengklarifikasi dan meminta maaf bahwa saya belum menjelaskan kasus sudut ini sebelumnya.s/(?!$b)$a/$b/g
, ketika $ a kosong karena string kosong setelahp
cocok(?!p)
saya butuhkan(?<!p)(?!p)
Arang , 55 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Menginisialisasi variabel untuk menunjukkan di mana pertandingan yang terakhir diganti berakhir.
Temukan semua kecocokan tumpang tindih
a
diS
.Jika pertandingan berikutnya tidak tumpang tindih dengan penggantian yang berhasil terakhir ...
... dan juga tumpang tindih tidak ada salinan
b
diS
...... lalu gabungkan substring antara antara pertandingan terakhir dan pertandingan ini dengan
b
ke string output ...... dan perbarui variabel akhir pertandingan terakhir hingga akhir pertandingan baru ini.
Pada akhirnya, tambahkan sisa
S
dan hasilkan hasilnya.sumber
Bahasa Wolfram (Mathematica) ,
431229688 byteCobalah online!
+79: harus diperbaiki.
Sebut sebagai
f[a,S,b]
.sumber
Perl 5 (
-lpF/;/
), 41 byteTIO
sumber
1222
,22
,122
] Harus output12122
, tetapi Anda output11222
12
, ternyata pertanyaan yang saya buat jauh lebih sulit daripada yang saya pikir!123
,23
,12
->112
tapi1212
,1
,121
->1212
(? Mengapa tidak harus121212
)S
tidak boleh cocok denganb
atau bagian mana untuk dilewati sebelum mencari pertandingan berikutnya