Sebuah kata portmanteau adalah kombinasi dari dua kata yang mengambil bagian dari setiap kata dan membuat mereka menjadi sebuah kata single baru. Misalnya, singa + harimau => liger .
Mari kita menulis sebuah program untuk menghasilkan portmanteaus dari sepasang kata input. Komputer bukan yang terbaik dalam bahasa Inggris, jadi kita perlu membuat beberapa aturan untuk memastikan bahwa portmanteaus output menyenangkan bagi mata dan telinga.
(Contoh di sini ditunjukkan dengan pemisah antara awalan dan akhiran untuk kejelasan:. li|ger
Namun, keluaran aktual program tidak boleh memiliki pemisah:. liger
)
- Setiap portmanteau akan terdiri dari awalan kosong dari kata pertama yang disatukan dengan akhiran kosong dari kata kedua: ya untuk
li|ger
, tidak untuk|iger
. - Jika awalan berakhir dengan vokal, akhiran harus dimulai dengan konsonan, dan sebaliknya: ya ke
lio|ger
ataul|er
, tidak kelio|iger
ataul|ger
. Anda dapat memutuskan apakah akan dihitungy
sebagai vokal atau konsonan. Solusi Anda harus memilih satu opsi dan tetap menggunakannya. - Kata yang dihasilkan tidak boleh berisi salah satu dari kata-kata asli secara penuh: ya untuk
lio|ger
, tidaklion|iger
atauli|tiger
.- Aturan ini berlaku bahkan jika bagian yang dimaksud dibentuk dari bagian dari kedua kata: dengan input
two
+words
, outputtw|ords
masih ilegal karena mengandung substringwords
. (Satu-satunya output yang valid untuk pasangan ini adalaht|ords
.)
- Aturan ini berlaku bahkan jika bagian yang dimaksud dibentuk dari bagian dari kedua kata: dengan input
Program atau fungsi Anda harus mengambil dua kata dan menampilkan / mengembalikan daftar semua portmanteaus menyenangkan yang dapat dibentuk dari kata-kata itu dalam urutan itu.
Detail
- Metode input dan output standar berlaku. Celah standar dilarang.
- Kata-kata hanya akan terdiri dari huruf kecil (atau, jika Anda suka, hanya huruf besar).
- Anda dapat menggunakan dua kata input sebagai daftar, tupel, dua input terpisah, string tunggal dengan pembatas non-huruf, dll.
- Format output juga fleksibel; jika Anda mengembalikan atau menampilkan string, itu harus dibatasi sehingga jelas di mana satu kata portmanteau berakhir dan yang berikutnya dimulai.
- Seharusnya tidak ada pembatas di dalam kata portmanteau.
- Tidak apa-apa jika daftar output Anda menyertakan hasil duplikat; menghapus duplikat juga tidak apa-apa.
Uji kasus
> lion, tiger
< liger, ler, liger, lir, lioger, lior
> tiger, lion
< tion, ton, tin, tigion, tigon, tigen
> spoon, fork
< sork, spork, spork, spok, spoork, spook
> smoke, fog
< sog, smog, smog, smokog
> gallop, triumph
< giumph, gumph, gariumph, gamph, gaph, gah, galiumph, galumph, galliumph, gallumph, galloriumph, gallomph, galloh
> breakfast, lunch
< bunch, brunch, brench, brech, breh, breanch, breach, breah, breakunch, breakfunch, breakfanch, breakfach, breakfah, breakfasunch
> two, words
< tords
> harry, ginny (if y is treated as a consonant)
< hinny, hanny, hany, hay, harinny, harrinny
> harry, ginny (if y is treated as a vowel)
> hinny, hy, hanny, hany, harinny, hary, harrinny
Solusi referensi
Berikut solusi referensi di Pip (memperlakukan y
sebagai konsonan).
Ini adalah kode-golf : jawaban terpendek di setiap bahasa menang!