В эпизоде Futurama «Узник Бенды» члены экипажа обмениваются телами друг с другом, с тем уловкой, что ни одна пара тел не может поменять свой разум более одного раза.
Вызов
Напишите программу или функцию, которая принимает действительный набор обменов разума и тела, которые уже произошли, и выводит законный набор обменов, которые вернут каждый разум в его первоначальное тело. Идентификаторы для этих коллекций разум-тело должны быть строками, которые не будут содержать переводы строки. Вы можете добавить до двух (с разными именами) людей, у которых ранее не было свопов в группу ввода. (Доказательство того, что вам нужно не более 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")]
Это неверно, потому что Итан и Клайд не нужны из-за того, как мало Фрая Филиппа, Зойдберга Джона и Гермеса Гермеса использовали машину. Действительное решение для этого случая предоставлено ниже:
[("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')]