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!
Jawaban:
05AB1E , 28 byte
y
adalah vokal (jumlah byte yang sama dengan konsonan).Cobalah online! atau sebagai Test Suite yang sedikit dimodifikasi
sumber
ʒs¢Z_
;ʒsåO_
;ʒsм__
; dll.Retina , 72 byte
Cobalah online!
sumber
Lw$`(?<=[aeiou])(.+),(.+)(?<!^\2\1,\2)(?!\1)(?=[^aeiou])|(?<=[^aeiou])(.+),(.+)(?<!^\4\3,\4)(?!\3)(?=[aeiou])
tetapi saya tidak bisa berkonsentrasi bermain golf karena sakit kepala.(?=.(?<=[aeiou]\1[^aeiou]|[^aeiou]\1[aeiou]))
dan kemudian mungkin memerlukan setidaknya enam iterasi untuk membawanya ke tempat sekarang.^
dalam komentar saya sebelumnya salah) Memang, saya tidak akan pernah memikirkan()|.()
trik itu, saya mungkin akan berhentiLw$`(?<=([aeiou])|.)((.+),(.+))(?<!\4\2)(?!\3)(?=(?(1)[^aeiou]|[aeiou]))
.Pyth , 38 byte
Input adalah daftar dari dua kata, dan Anda tidak diperlakukan sebagai konsonan.
Cobalah online di sini , atau verifikasi semua uji sekaligus di sini .
sumber
Java 8,
228225215 byteMembawa dua string dalam sintaks currying dan mengembalikan sebuah String. Memperlakukan
y
sebagai konsonan. Cobalah online di sini .Berkat DLosc untuk bermain golf 2 byte.
Tidak Disatukan:
sumber
Japt , 32 byte
Japt Interpreter
Disimpan 10 byte berkat pemahaman Shaggy yang lebih jelas tentang sintaks Japt.
Disimpan 8 byte karena fitur bahasa baru
Disimpan 2 byte berkat beberapa saran dari ETHproductions
Versi terbaru dari Japt memperkenalkan fungsi Produk Cartesian, yang menghemat beberapa byte dan memungkinkan saya untuk mengembalikan urutan input (jadi "singa" "harimau" menghasilkan "liger" dan semacamnya). "y" masih diperlakukan sebagai konsonan.
Penjelasan:
sumber
Python 3 ,
156150 byteSaya telah dianggap
y
sebagai konsonan.-6 byte terima kasih kepada Jonathan Frech
Cobalah online!
sumber
lambda x=0
untuk menurunkannya untuk menyimpan ... 0 karakter, yang mengganggu.lambda a,b,v='aeiou',r=range:{a[:i]+b[j:]for i in r(1,len(a))for j in r(1,len(b))if((a[i-1]in v)^(b[j]in v))*0**(a in a[:i]+b[j:]or b in a[:i]+b[j:])}
(Masih 150)JavaScript (ES6), 124 byte
Membawa 2 kata dalam sintaks currying
(a)(b)
dan mencetak hasilnya denganalert()
. Berasumsi y adalah konsonan.Cobalah online!
sumber
Jelly , 27 byte
Cobalah online!
Yy adalah konsonan. Kedua kasus didukung. Menghasilkan duplikat.
Output telah diprettified atas TIO. Hapus
+/€
dari footer untuk melihat output aktual.sumber
C ++ 11,
217202 byteMembuat penggunaan berat
std::string#find
. Memperlakukany
sebagai konsonan. Cobalah online di sini .Tidak Disatukan:
sumber
Python 2 ,
179176166162 byteCobalah online!
3 byte dari Jonathan Frech . Dan 10 byte thx ke The Matt .
Di duniaku,
y
bukan vokal. (Ini merinding!)sumber
t) if
dant) or []
.(s in w)<1>(t in w)
.Ruby ,
113 112 109104 bytey
adalah konsonanIni menghasilkan duplikat yang sama seperti contoh dalam pertanyaan, saya harus menggunakan loop yang sama
Cobalah online!
sumber
Emacs Lisp , 306 + 13 = 319 byte
+13 untuk
(require'seq)
Cobalah secara Online!
Menentukan fungsi lambda anonim. Menghasilkan urutan portmanteaus yang dipisahkan baris baru dengan masing-masing dikelilingi oleh tanda kutip. Tips bermain golf dipersilakan. Surat
y
itu dianggap sebagai konsonan.Tidak disatukan
sumber