String dengan Konteks
Untuk keperluan tantangan ini, string dengan konteks adalah tiga string, yang disebut konteks kiri , bagian data , dan konteks yang benar . Ini mewakili substring dari string yang lebih panjang. Kami menggunakan pipa vertikal |
sebagai pemisah, jadi contoh string dengan konteks adalah cod|e-go|lf
, di mana konteks kiri cod
, data e-go
, dan konteks yang benar lf
. Contoh ini mewakili substring e-go
dari code-golf
.
Sekarang, untuk menyatukan dua string dengan konteks, kami melanjutkan sebagai berikut, menggunakan aa|bcc|dee
dan cc|de|eee
sebagai contoh. Kami menyelaraskan string seperti pada diagram
a a|b c c|d e e
c c|d e|e e e
sehingga bagian data mereka berdekatan. Bagian data dari rangkaian adalah gabungan bagian data, dalam hal ini bccde
. Konteks kiri adalah bagian yang memanjang lebih jauh ke kiri dari bagian data pertama, dalam hal ini aa
. Demikian pula, konteks yang tepat adalah eee
, jadi rangkaiannya adalah string dengan konteks aa|bccde|eee
. Untuk contoh kedua, pertimbangkan a|bb|cd
dan aabb|cd|
, di mana kata kedua memiliki konteks kanan kosong. Diagram penyelarasan adalah
a|b b|c d
a a b b|c d|
di mana konteks kiri kata kedua meluas lebih jauh dari yang pertama. Rangkaiannya adalah aa|bbcd|
.
Tapi tunggu, ada gotcha: jika huruf-huruf diagram alinyemen tidak cocok, maka tidak ada concatenation! Sebagai contoh, diagram aa|bb|cc
dan c|c|c
is
a a|b b|c c
c|c|c
di mana b
dan c
pada kolom keempat tidak setuju, sehingga mereka tidak bisa digabungkan.
Tugas
Tugas Anda adalah menulis sebuah program yang terdiri dari dua string dengan konteks yang bagian-bagiannya dipisahkan |
seperti di atas, dan menampilkan rangkaiannya jika ada, dan sesuatu yang lain jika tidak. "Sesuatu yang lain" bisa berupa nilai apa saja, termasuk tidak ada keluaran, asalkan itu bukan string yang valid dengan konteks, dan itu sama dalam semua kasus. Namun, melempar kesalahan tidak dapat diterima. Anda dapat memberikan program STDIN-ke-STDOUT atau fungsi, dan fungsi anonim juga diterima. Hitungan byte terkecil menang, dan celah standar tidak diizinkan.
Uji Kasus
aa|bcc|dee cc|de|eee -> aa|bccde|eee
a|bb|cd aabb|cd| -> aa|bbcd|
a|b|cccd aab|cc|c -> aa|bcc|cd
a|b|c b||cd -> a|b|cd
aa|bb|cc c|c|c -> None
aaa|b|c abb|cd|d -> None
|bb|cd abb|c|ed -> None
a|b|c a||cd -> None
|1<2=""
ke definisi&
harus menyelesaikannya. Maaf saya tidak menyebutkan ini secara lebih spesifik dalam spesifikasi, saya akan mengeditnya.'|'
tanda saat senar tidak cocok?Python (242 byte)
Penjelasan
Fungsi lambda
m
mengembalikan lebih lama dari dua string selama mereka berbagi awalan yang sama. Hal ini dilakukan dengan concatenating string kosong''
di tempat nilai-nilai yang hilang, maka mengubah hasil (yang mungkin mengambil bentukaa
,ab
,a
, ataub
dalam kasus-kasus pertandingan / ketidakcocokan / panjang yang tidak sama) menjadi satu set karakter unik pada setiap posisi.join
mengharapkan satu argumen, jadi membongkar set dengan lebih dari satu elemen akan menyebabkannya memunculkan aTypeError
.Fungsi utamanya kemudian
m
untuk menggabungkan konteks kiri dan data bagian kata pertama dengan konteks kiri yang kedua (dari kanan ke kiri string terbalik)m
untuk menggabungkan konteks yang benar dari kata pertama dengan bagian data dan konteks yang benar dari kata keduaBagian data dua kata asli 'dipangkas dari sisi kanan dan kiri konteks baru.
Karena kita tahu bahwa ketidaksejajaran menyebabkan
m
peningkatanTypeError
, dalam kasus ini kita menangkap pengecualian dan secara implisit kembaliNone
.Pengujian
Keluaran
sumber