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
, z
odpowiednio 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
, y
i z
z 1
. Ponownie, uproszczenie Mathematiki jest w tym 1*a
zawsze 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 Orderless
tak, ż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.