Nell'episodio di Futurama, i membri dell'equipaggio del Prigioniero di Benda si scambiano i corpi l'uno con l'altro, con la cattura che nessuna coppia di corpi può scambiare le loro menti più di una volta.
Sfida
Scrivi un programma o una funzione che accetta una raccolta valida di scambi mente-corpo che si sono già verificati e genera un insieme legale di scambi che riporterà ogni mente al suo corpo originale. Gli identificatori per queste raccolte corpo-mente devono essere stringhe che non conterranno nuove righe. È possibile aggiungere fino a due persone (con un nome distinto) che non hanno avuto scambi precedenti con il gruppo di input. (Prova che sono necessari solo al massimo 2 corpi aggiuntivi) Tuttavia, è necessario aggiungere il numero minimo di persone richieste per risolvere il problema.
L'input e l'output possono assumere qualsiasi forma chiara, tuttavia, nessuna informazione aggiuntiva può essere memorizzata in entrambi. Puoi presumere che sia sempre valido. Questo è il codice golf, quindi il vincitore è l'invio con il minor numero di byte.
Esempi
[('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"
Quello dello spettacolo:
[("Amy","Hubert"),("Bender","Amy"),("Hubert","Turanga"),("Amy","Wash Bucket"),("Wash Bucket","Nikolai"),("Phillip","John"),("Hermes","Turanga")]
La soluzione dello spettacolo, fornita di seguito, non è valida:
[("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")]
Questo non è valido perché Ethan e Clyde non sono necessari a causa di quanto poco Fry Phillip, Zoidberg John ed Hermes Hermes usassero la macchina. Di seguito viene fornita una soluzione valida per questo caso:
[("Philip","Hubert"),("John","Wash Bucket"),("Philip","Turanga"),("John","Nikolai"),("Philip","Hermes"),("John","Bender"),("Philip","Amy"),("John","Hubert"),("Philip","Wash Bucket")]
Si noti che ci sono chiaramente molte risposte possibili per qualsiasi input valido. Qualsiasi è valido.
[('Nikolai', 'Phillip'), ('Nikolai', 'Hubert'), ('Nikolai', 'Turanga'), ('Nikolai', 'Bender'), ('Phillip', 'Amy'), ('John', 'Wash Bucket'), ('Nikolai', 'John'), ('Phillip', 'Wash Bucket'), ('Hubert', 'John'), ('Bender', 'Hermes')]