Mathematica, 84 Bytes
(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")/#/.x->1/.y->1/.z->1&
Erläuterung
Mehr "Rechnen" mit Strings! Wie in der verknüpften Antwort basiert dies auf der Tatsache, dass Sie Zeichenfolgen in Mathematica "multiplizieren" können, wodurch sie nicht bewertet werden (ähnlich wie beim Multiplizieren von zwei nicht zugewiesenen Variablen x*y
), Mathematica jedoch grundlegende Vereinfachungen anwendet, z. B. das Löschen von Faktoren in einer Division.
So starten wir durch Speichern der drei Paare als Produkte x
, y
, z
jeweils und multiplizieren sie alle zusammen:
(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")
Dies ergibt
"freedom" "ignorance" "peace" "slavery" "strength" "war"
(Mathematica sortiert die Faktoren automatisch, aber die Reihenfolge ist uns egal.)
Wir teilen dies durch die Eingabe, um das Wort zu entfernen, mit dem wir nicht wollen .../#
, da Mathematica die Faktoren aufhebt. Wenn die Eingabe beispielsweise "peace"
so wäre, würden wir am Ende Folgendes erhalten:
"freedom" "ignorance" "slavery" "strength" "war"
Schließlich erhalten wir von den Paaren befreien wir nicht interessiert sind, die von jedem der Substitution x
, y
und z
mit 1
. Auch hier ist die Vereinfachung von Mathematica 1*a
immer so a
. Dieser Teil ist erledigt mit:
/.x->1/.y->1/.z->1
Das Schöne ist, dass Mathematica weiß, dass Multiplikation Orderless
so ist, dass die beiden Faktoren unabhängig davon gefunden werden, ob sie im Produkt benachbart sind oder nicht. Nur das Wort, das der Eingabe entgegengesetzt ist, wird im Produkt nicht mehr gepaart, sodass eines nicht entfernt wird und als einzige Ausgabe verbleibt.