甲混成词是两个词的组合拍摄每一个单词的一部分,使它们变成单一的新词。例如,狮子 + 老虎 => liger。
让我们编写一个从一对输入单词生成portmanteaus的程序。电脑不是英语水平最好的,所以我们需要建立一些规则以确保输出的portmanteaus令人耳目一新。
(为清楚起见li|ger
,此处的示例在前缀和后缀之间显示了分隔符:。但是,程序的实际输出不应包含分隔符:liger
。)
- 每个portmanteau将由第一个单词的非空前缀与第二个单词的非空后缀组成:yes到
li|ger
,no to|iger
。 - 如果前缀以元音结尾,则后缀必须以辅音开头,反之亦然:是
lio|ger
或l|er
,否是lio|iger
或l|ger
。您可以决定算作y
元音还是辅音。但是,您的解决方案必须选择一个选项并坚持使用。 - 产生的字词不得完整包含两个原始字词:是
lio|ger
,lion|iger
或li|tiger
。- 即使所讨论的部分是由两个单词的一部分组成的,该规则仍然成立:输入为
two
+时words
,输出tw|ords
仍然是非法的,因为它包含子字符串words
。(此对的唯一有效输出是t|ords
。)
- 即使所讨论的部分是由两个单词的一部分组成的,该规则仍然成立:输入为
您的程序或函数必须使用两个单词,并输出/返回可以由这些单词按该顺序形成的所有令人愉悦的portmanteaus列表。
细节
- 标准输入和输出方法适用。禁止出现标准漏洞。
- 单词将仅包含小写字母(或者,如果您愿意,也仅包含大写字母)。
- 您可以将两个输入单词作为列表,元组,两个单独的输入,带有非字母定界符的单个字符串等。
- 输出格式同样具有灵活性;如果您返回或输出一个字符串,则应将其定界,以使一个portmanteau单词的末尾清晰而下一个开始。
- 在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
参考溶液
这是代码高尔夫:每种语言中最短的答案胜出!