Mathematica, 84 bajty
(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")/#/.x->1/.y->1/.z->1&
Wyjaśnienie
Więcej „arytmetyki” ze sznurkami! Podobnie jak w połączonej odpowiedzi, opiera się to na tym, że można „pomnożyć” ciągi w Mathematica, co pozostawi je bez oceny (podobnie jak pomnożenie dwóch nieprzypisanych zmiennych x*y), ale Mathematica zastosuje podstawowe uproszczenia, takie jak czynniki anulujące w podziale.
Więc zaczynamy przechowując trzy pary jako produktów x, y, zodpowiednio i pomnożyć je wszystkie razem:
(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")
To ocenia na
"freedom" "ignorance" "peace" "slavery" "strength" "war"
(Mathematica automatycznie sortuje czynniki, ale nie dbamy o porządek.)
Dzielimy to przez dane wejściowe, aby usunąć słowo, którego nie chcemy .../#, ponieważ Mathematica anuluje czynniki. Na przykład, jeśli dane wejściowe "peace"byłyby zakończone:
"freedom" "ignorance" "slavery" "strength" "war"
Wreszcie pozbędziemy par nie jesteśmy zainteresowani, zastępując każdego x, yi zz 1. Ponownie, uproszczenie Mathematiki jest w tym 1*azawsze ważne a. Ta część składa się z:
/.x->1/.y->1/.z->1
Zaletą jest to, że Mathematica wie, że mnożenie jest Orderlesstak, że znajdzie to dwa czynniki niezależnie od tego, czy sąsiadują one z produktem, czy nie. Tylko słowo przeciwne do danych wejściowych nie jest już sparowane w produkcie, więc nie można go usunąć i pozostaje ono jedynym wyjściem.