Mathematica,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会自动对因素进行排序,但我们不在乎顺序。)
我们通过将输入除以该删除我们的话不与希望.../#
,因为数学取消的因素。例如,如果输入是"peace"
我们的最终结果:
"freedom" "ignorance" "slavery" "strength" "war"
最后,我们摆脱我们不感兴趣的对,通过替换每一个x
,y
并z
用1
。同样,Mathematica的简化1*a
总是如此a
。这部分完成:
/.x->1/.y->1/.z->1
令人高兴的是,Mathematica知道乘法就是Orderless
这样,所以无论它们在乘积中是否相邻,这都将找到两个因子。产品中仅不再与输入相反的单词配对,因此不会删除一个单词并将其保留为唯一输出。