かばんの単語は、各単語の一部を取り、単一の新しい単語にそれらを作る二つの単語を組み合わせたものです。たとえば、lion + tiger => ligerです。
1組の入力語からportmanteausを生成するプログラムを作成しましょう。コンピューターは英語が上手ではないので、出力のマントマンが目と耳に心地よいものになるように、いくつかのルールを確立する必要があります。
(ここでの例は、わかりやすくするために接頭辞と接尾辞の間に区切り文字を付けて示していますli|ger
。ただし、プログラムの実際の出力には区切り文字を使用しないでくださいliger
。)
- 各portmanteauは、2番目の単語の空でない接尾辞に連結された最初の単語の空でない接頭辞で構成されます:yes to
li|ger
、no to|iger
。 - 接頭辞が母音で終わる場合、接尾辞は子音で始まる必要があり、その逆も同様です:yes to
lio|ger
またはl|er
no tolio|iger
orl|ger
。母音と子音のどちらとして数えるかを決めることができy
ます。ただし、ソリューションでは1つのオプションを選択し、それに従う必要があります。 - 結果の単語には、元の単語のいずれか(yes to
lio|ger
、no to、lion|iger
または)を完全に含めることはできませんli|tiger
。- このルールは、問題の部分が両方の単語の一部で構成されている場合でも成立します。入力が
two
+のwords
場合、出力にtw|ords
はsubstringが含まれているため、出力は依然として不正words
です。(このペアの有効な出力はのみですt|ords
。)
- このルールは、問題の部分が両方の単語の一部で構成されている場合でも成立します。入力が
プログラムまたは関数は2つの単語を取り、それらの単語からその順序で形成できるすべての快適な門脈のリストを出力または返す必要があります。
詳細
- 標準の入出力方法が適用されます。標準的な抜け穴は禁止されています。
- 単語は小文字のみで構成されます(または、必要に応じて大文字のみで構成されます)。
- 2つの入力語をリスト、タプル、2つの個別の入力、非文字区切り文字付きの単一の文字列などとして使用できます。
- 出力形式も同様に柔軟です。文字列を返すか出力する場合は、あるportmanteauの単語がどこで終わり、次の単語が始まるかが明確になるように区切る必要があります。
- ポルトマントー語の中に区切り文字はありません。
- 出力リストに重複した結果が含まれていても問題ありません。重複を削除してもかまいません。
テストケース
> 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
参照ソリューション
Pipのリファレンスソリューションを次に示します(y
子音として扱います)。
これはコードゴルフです。各言語で最短の答えが勝ちます!