Mathematica、84バイト
(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")/#/.x->1/.y->1/.z->1&
説明
文字列を使用したより多くの「算術」!リンクされた答えのように、これはMathematicaで文字列を「乗算」して評価せずにおくことができるという事実に基づいています(2つの未割り当て変数の乗算に似ていますx*y
)が、Mathematicaは除算の要素をキャンセルするなどの基本的な単純化を適用します
だから我々は、中の製品として3組を格納することによって開始し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
ので、製品内で隣接しているかどうかに関係なく、2つの要因を見つけることができるということです。入力と反対の単語のみが製品でペアリングされないため、削除されず、唯一の出力として残ります。