En el episodio de Futurama, los miembros de la tripulación de The Prisoner of Benda intercambian cuerpos entre ellos, con la trampa de que ningún par de cuerpos puede intercambiar sus mentes más de una vez.
Desafío
Escriba un programa o función que acepte una colección válida de intercambios de mente y cuerpo que ya hayan ocurrido, y genere un conjunto legal de intercambios que devolverá cada mente a su cuerpo original. Los identificadores para estas colecciones de cuerpo y mente deben ser cadenas que no contendrán nuevas líneas. Puede agregar hasta dos personas (con nombres distintos) que no hayan tenido intercambios previos al grupo de entrada. (Prueba de que solo necesita como máximo 2 cuerpos adicionales) Sin embargo, debe agregar el número mínimo de personas necesarias para resolver el problema.
La entrada y la salida pueden tomar una forma clara, sin embargo, tampoco se puede almacenar información adicional. Puede suponer que siempre es válido. Este es el código de golf, por lo que el ganador es el envío con la menor cantidad de bytes.
Ejemplos
[('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"
El del show:
[("Amy","Hubert"),("Bender","Amy"),("Hubert","Turanga"),("Amy","Wash Bucket"),("Wash Bucket","Nikolai"),("Phillip","John"),("Hermes","Turanga")]
La solución del programa, dada a continuación, no es válida:
[("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")]
Esto no es válido porque Ethan y Clyde son innecesarios por lo poco que Fry Phillip, Zoidberg John y Hermes Hermes usaron la máquina. A continuación se proporciona una solución válida para este caso:
[("Philip","Hubert"),("John","Wash Bucket"),("Philip","Turanga"),("John","Nikolai"),("Philip","Hermes"),("John","Bender"),("Philip","Amy"),("John","Hubert"),("Philip","Wash Bucket")]
Tenga en cuenta que claramente hay muchas respuestas posibles para cualquier entrada válida. Cualquiera es valido.
[('Nikolai', 'Phillip'), ('Nikolai', 'Hubert'), ('Nikolai', 'Turanga'), ('Nikolai', 'Bender'), ('Phillip', 'Amy'), ('John', 'Wash Bucket'), ('Nikolai', 'John'), ('Phillip', 'Wash Bucket'), ('Hubert', 'John'), ('Bender', 'Hermes')]