Dans l'épisode Futurama, le prisonnier de Benda, les membres de l'équipage échangent leurs corps les uns avec les autres, avec la capture qu'aucune paire de corps ne peut avoir leur esprit échangé plus d'une fois.
Défi
Écrivez un programme ou une fonction qui accepte une collection valide de permutations corps-esprit qui se sont déjà produites et génère un ensemble légal de permutations qui ramènera chaque esprit à son corps d'origine. Les identifiants de ces collections corps-esprit doivent être des chaînes qui ne contiennent pas de nouvelles lignes. Vous pouvez ajouter jusqu'à deux personnes (distinctement nommées) qui n'ont eu aucun échange préalable dans le groupe d'entrée. (Preuve que vous n'avez besoin que d'au plus 2 corps supplémentaires) Cependant, vous devez ajouter le nombre minimum de personnes nécessaires pour résoudre le problème.
L'entrée et la sortie peuvent prendre n'importe quelle forme claire, cependant, aucune information supplémentaire ne peut être stockée dans l'un ou l'autre. Vous pouvez supposer qu'il est toujours valide. C'est le golf de code, donc le gagnant est la soumission avec le moins d'octets.
Exemples
[('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"
Celui du spectacle:
[("Amy","Hubert"),("Bender","Amy"),("Hubert","Turanga"),("Amy","Wash Bucket"),("Wash Bucket","Nikolai"),("Phillip","John"),("Hermes","Turanga")]
La solution de l'émission, donnée ci-dessous, n'est pas valide:
[("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")]
Ceci n'est pas valide car Ethan et Clyde ne sont pas nécessaires en raison du peu de Fry Phillip, Zoidberg John et Hermes Hermes qui ont utilisé la machine. Une solution valable pour ce cas est fournie ci-dessous:
[("Philip","Hubert"),("John","Wash Bucket"),("Philip","Turanga"),("John","Nikolai"),("Philip","Hermes"),("John","Bender"),("Philip","Amy"),("John","Hubert"),("Philip","Wash Bucket")]
Notez qu'il existe clairement de nombreuses réponses possibles pour toute entrée valide. Tout est valide.
[('Nikolai', 'Phillip'), ('Nikolai', 'Hubert'), ('Nikolai', 'Turanga'), ('Nikolai', 'Bender'), ('Phillip', 'Amy'), ('John', 'Wash Bucket'), ('Nikolai', 'John'), ('Phillip', 'Wash Bucket'), ('Hubert', 'John'), ('Bender', 'Hermes')]