W odcinku Futurama The Prisoner of Benda członkowie załogi wymieniają się ciałami, z zastrzeżeniem, że żadna para ciał nie może zamieniać umysłów więcej niż raz.
Wyzwanie
Napisz program lub funkcję, która akceptuje prawidłową kolekcję zamian umysłu-ciała, które już miały miejsce, i wysyła legalny zestaw zamian, które przywrócą każdy umysł do pierwotnego ciała. Identyfikatory tych kolekcji ciało-umysł muszą być łańcuchami, które nie będą zawierać nowych linii. Możesz dodać maksymalnie dwie (wyraźnie nazwane) osoby, które nie miały wcześniej swapów do grupy wejściowej. (Dowód, że potrzebujesz maksymalnie 2 dodatkowych ciał). Musisz jednak dodać minimalną liczbę osób wymaganą do rozwiązania problemu.
Dane wejściowe i wyjściowe mogą przybierać dowolną czytelną formę, jednak nie można w nich przechowywać żadnych dodatkowych informacji. Możesz założyć, że zawsze jest ważny. To jest kod golfowy, więc zwycięzcą jest zgłoszenie z najmniejszą liczbą bajtów.
Przykłady
[('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"
Ten z serialu:
[("Amy","Hubert"),("Bender","Amy"),("Hubert","Turanga"),("Amy","Wash Bucket"),("Wash Bucket","Nikolai"),("Phillip","John"),("Hermes","Turanga")]
Przedstawione poniżej rozwiązanie programu jest nieprawidłowe:
[("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")]
Jest to nieważne, ponieważ Ethan i Clyde są niepotrzebni z powodu tego, jak mało Fry Phillip, Zoidberg John i Hermes Hermes używali maszyny. Prawidłowe rozwiązanie dla tego przypadku podano poniżej:
[("Philip","Hubert"),("John","Wash Bucket"),("Philip","Turanga"),("John","Nikolai"),("Philip","Hermes"),("John","Bender"),("Philip","Amy"),("John","Hubert"),("Philip","Wash Bucket")]
Zauważ, że istnieje wiele możliwych odpowiedzi na każde prawidłowe dane wejściowe. Każda jest ważna.
[('Nikolai', 'Phillip'), ('Nikolai', 'Hubert'), ('Nikolai', 'Turanga'), ('Nikolai', 'Bender'), ('Phillip', 'Amy'), ('John', 'Wash Bucket'), ('Nikolai', 'John'), ('Phillip', 'Wash Bucket'), ('Hubert', 'John'), ('Bender', 'Hermes')]