Dalam tantangan ini, tugas Anda adalah menemukan substring dengan struktur yang diberikan.
Memasukkan
Input Anda harus berupa dua string alfanumerik yang tidak kosong, pola p
dan teks t
. Idenya adalah bahwa masing-masing karakter p
mewakili substring non-kosong yang berdekatan t
yang terjadi di samping satu sama lain, dan p
mewakili penggabungan mereka. Karakter identik sesuai dengan substring identik; misalnya, polanya aa
mewakili sembarang kotak kosong (string yang diperoleh dengan menggabungkan string yang lebih pendek ke dirinya sendiri). Dengan demikian polanya aa
dapat cocok dengan substring byebye
, dengan setiap a
pencocokan bye
.
Keluaran
Jika teks t
berisi substring yang p
cocok, maka output Anda harus substring itu, dengan titik dua :
dimasukkan di antara string yang sesuai dengan karakter p
. Sebagai contoh, jika kita memiliki t = byebyenow
dan p = aa
, maka bye:bye
merupakan output yang dapat diterima. Mungkin ada beberapa pilihan untuk substring yang cocok, tetapi Anda hanya akan menghasilkan salah satunya.
Jika t
tidak mengandung substring yang cocok, output Anda akan menjadi wajah sedih :(
.
Aturan dan Klarifikasi
Karakter yang berbeda p
dapat sesuai dengan substring yang identik, sehingga p = aba
dapat cocok dengan string AAA
. Perhatikan bahwa karakter harus sesuai dengan string yang tidak kosong; khususnya, jika p
lebih lama dari t
, output harus :(
.
Anda dapat menulis program atau fungsi lengkap, dan Anda juga dapat mengubah urutan kedua input. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Uji Kasus
Diberikan dalam format pattern text -> output
. Perhatikan bahwa output lain yang dapat diterima mungkin ada.
a Not -> N
aa Not -> :(
abcd Not -> :(
aaa rerere -> re:re:re
xx ABAAAB -> A:A
MMM ABABBAABBAABBA -> ABBA:ABBA:ABBA
x33x 10100110011001 -> 10:1001:1001:10
abcacb 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> c:a0aa:0c:c:0c:a0aa
abccab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> a:a:0c0:0c0:a:a
abcbcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> :(
abcbdcab 0a00cca0aa0cc0ca0aa0c00c0aaa0c -> 00:c:ca0aa0c:c:0:ca0aa0c:00:c
sumber
O(2^((n * (n + 1))/2))
: PJawaban:
Python, 207 byte
Telepon dengan
g(pattern, string)
Menggunakan
re
modul untuk melakukan sebagian besar pekerjaan.sumber
JavaScript (SpiderMonkey) (ES5.1), 198 byte
Sejak ES6 dirilis pada Juni 2015, saya memposting versi ES5.1 kode bersama dengan ES6 yang setara, tetapi menyatakan versi ES5.1 sebagai jawaban utama.
Pertandingan serakah, jadi case pertama mengembalikan "Tidak", bukan "N".
Cobalah online!
JavaScript (Node.js) (ES6), 141 byte
Cobalah online!
Mengambil argumen dalam sintaks currying:
f(a)(b)
Penjelasan (dan ungolfed):
sumber
Brachylog , 35 byte
Cobalah online!
Pada input yang tidak terlalu kecil, sangat lambat. Saya-belum-benar-benar melakukan-ke-6-ujian-kasus-tetapi-bukan-karena-kurang-mencoba-lambat. (Mungkin karena memaksa setiap partisi dari setiap substring, mulai dengan yang terbesar, dan kemudian memeriksa apakah itu cocok.) Mengambil input sebagai daftar
[pattern,string]
.Penjelasan ringkas dan dibagi:
sᵗ~cᵗX
X adalah pola yang dipasangkan dengan partisi dari substring dari string input.
lᵛ
Pola dan partisi memiliki jumlah elemen yang sama.
Xzdz≠ʰ
Tidak ada dua
pattern char, matched substring
pasangan unik yang berbagi karakter pola. Artinya, tidak ada karakter pola yang memetakan ke beberapa substring, meskipun beberapa karakter pola dapat memetakan ke satu substring.Xt~ṇ{Ḷ∧":"|}ᵐ.∨":("
Outputnya adalah elemen-elemen dari partisi yang bergabung dengan titik dua, kecuali sesuatu tidak dapat dilakukan, dalam hal ini
:(
sebaliknya.Penjelasan monolitik:
sumber