Математика, 84 байти
(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")/#/.x->1/.y->1/.z->1&
Пояснення
Більш "арифметичний" з рядками! Як і у пов'язаній відповіді, це ґрунтується на тому, що ви можете "помножити" рядки в Mathematica, що залишить їх неоціненими (подібно до множення двох непризначених змінних x*y
), але що Mathematica застосує основні спрощення, як скасування факторів у поділі.
Таким чином , ми починаємо зберігати три пари в якості продуктів в x
, y
, z
, відповідно , і помножити їх все разом:
(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")
Це оцінюється до
"freedom" "ignorance" "peace" "slavery" "strength" "war"
(Mathematica автоматично сортує фактори, але ми не дбаємо про порядок.)
Ми ділимо це введенням, щоб видалити слово, яке ми не хочемо .../#
, оскільки Mathematica скасовує фактори. Наприклад, якби вхід "peace"
ми закінчили:
"freedom" "ignorance" "slavery" "strength" "war"
Нарешті, ми позбавляємося від пар , ми не зацікавлені, шляхом заміни кожного з x
, y
і z
з 1
. Знову ж таки, спрощення Mathematica 1*a
викликає це завжди a
. Ця частина виконується за допомогою:
/.x->1/.y->1/.z->1
Приємно те, що Mathematica знає, що це множення, Orderless
тому це знайде два чинники незалежно від того, суміжні вони у творі чи ні. Тільки слово, яке є протилежним до вводу, більше не спарюється у продукті, так що воно не буде вилучене та залишається єдиним результатом.