在《 Futurama》情节中,剧组的Benda囚犯成员相互交换尸体,但要注意的是,没有一对尸体可以交换思想。
挑战
编写一个程序或函数,该程序或函数接受已经发生的有效的身心交换,并输出一组合法的交换,这些交换将使每个头脑返回其原始身体。这些身心集合的标识符必须是不包含换行符的字符串。您最多可以添加两个(没有明显名字的)人,他们之前没有与输入组的交换。(证明您最多只需要2个其他实体),但是,您必须添加解决问题所需的最少人数。
输入和输出可以采用任何清楚的形式,但是,任何其他信息都不能存储在其中。您可能会认为它始终有效。这是代码高尔夫,所以获胜者是字节最少的提交。
例子
[('A','B'),('C','D')] -> [('A','C'),('B','D'),('A','D'),('B','C')]
['A','B'] -> ['C','D','A','C','B','D','A','D','B','C']
[('A','B'),('C','D'),('A','C'),('A','D')] -> [('B', 'E'), ('A', 'E'), ('C', 'B'), ('C', 'E')]
"A\nB\nC\nD\n" -> "A\nC\nB\nD\nA\nD\nB\nC\n"
节目中的一个:
[("Amy","Hubert"),("Bender","Amy"),("Hubert","Turanga"),("Amy","Wash Bucket"),("Wash Bucket","Nikolai"),("Phillip","John"),("Hermes","Turanga")]
演出的解决方案,如下所示,是无效的:
[("Clyde","Phillip"),("Ethan","John"),("Clyde","John"),("Ethan",Phillip"),("Clyde","Hubert"),("Ethan","Wash Bucket"),("Clyde","Leela"),("Ethan","Nikolai"),("Clyde","Hermes"),("Ethan","Bender"),("Clyde","Amy"),("Ethan","Hubert"),("Clyde","Wash Bucket")]
这是无效的,因为Ery和Clyde是不必要的,因为Fry Phillip,Zoidberg John和Hermes Hermes 很少使用该机器。下面提供了针对这种情况的有效解决方案:
[("Philip","Hubert"),("John","Wash Bucket"),("Philip","Turanga"),("John","Nikolai"),("Philip","Hermes"),("John","Bender"),("Philip","Amy"),("John","Hubert"),("Philip","Wash Bucket")]
请注意,对于任何有效输入,显然都有许多可能的答案。任何有效。
[('Nikolai', 'Phillip'), ('Nikolai', 'Hubert'), ('Nikolai', 'Turanga'), ('Nikolai', 'Bender'), ('Phillip', 'Amy'), ('John', 'Wash Bucket'), ('Nikolai', 'John'), ('Phillip', 'Wash Bucket'), ('Hubert', 'John'), ('Bender', 'Hermes')]