背景
三年前,这个家伙汤姆·墨菲(Tom Murphy)想到了将Portmanteau的概念扩展到语言中的所有单词,并称其为portmantout(portmanteau加上tout [French for all ])。他将英语定义为108,709个单词的列表,设法找到了具有以下两个属性的611,820个字母序列:
- 字符串中包含每个英语单词。
- 字符串中包含任意两个相邻字母的邻域是一个英语单词。
这是指向该portmantout的页面的链接(以及视频说明)。
搬运工
portmantout的两个属性中的第一个很容易理解。第二个可能需要一些解释。
基本上,单词必须重叠。“ golfcode”将永远不会出现在英语的portmantout中,因为那里没有包含“ fc”的词。但是,您可能会在portmantout中找到“ codegolf”,因为“ ego”弥合了差距(所有其他字母对都在“ code”或“ golf”中)。
你的任务:
编写一个程序或函数,该程序或函数需要一个字符串列表并返回该列表的所有portmantout。
此Python 3代码将验证portmantout。
测试用例
所有列表都是无序的;那是,
{"code", "ego", "golf"} -> "codegolf"
{"more", "elm", "maniac"} -> "morelmaniac" or "morelmorelmaniac" or "morelmorelmorelmaniac" or...
Would a morelmaniac be some sort of mycologist?
{"ab", "bc", "cd", "de", "ef", "fg", "gh", "hi", "ij", "jk", "kl", "lm", "mn", "no", "op", "pq", "qr", "rs", "st", "tu", "uv", "vw", "wx", "xy", "yz", "za"} -> "abcdefghijklmnopqrstuvwxyza" or "rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdef" or any 27+ letters in order
那么为何不?如果您的代码在合理的时间内执行,则可以在Murphy网站上找到大量代码。
规则
- 您的代码必须暂停。
- 您不必在每次执行时都返回相同的portmantout。
- 你可以假设所有的字符串只包含小写字母的
a
通过z
。 - 如果无法进行portmantout,则您的程序可能会执行任何操作。例如:
{"most", "short", "lists"}
- I / O和漏洞的标准规则适用。
这是代码高尔夫,因此每种语言中最短的解决方案(以字节为单位)将获胜!打高尔夫球快乐!
{"sic", "bar", "rabbits", "cradle"} -> "barabbitsicradle"
{"mauve", "elated", "cast", "electric", "tame"} -> "mauvelectricastamelated"
(更多测试用例)