Mathematica, 84 bytes
(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")/#/.x->1/.y->1/.z->1&
Explicação
Mais "aritmética" com cordas! Como na resposta vinculada, isso se baseia no fato de que você pode "multiplicar" cadeias no Mathematica, o que as deixará sem avaliação (semelhante à multiplicação de duas variáveis não atribuídas x*y
), mas o Mathematica aplicará simplificações básicas, como fatores de cancelamento em uma divisão.
Então, vamos começar por armazenar os três pares de produtos x
, y
, z
, respectivamente, e multiplicá-los todos juntos:
(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")
Isso avalia como
"freedom" "ignorance" "peace" "slavery" "strength" "war"
(O Mathematica classifica automaticamente os fatores, mas não nos importamos com o pedido.)
Dividimos isso pela entrada para remover a palavra com a qual não queremos .../#
, pois o Mathematica cancela os fatores. Por exemplo, se a entrada fosse "peace"
, teríamos:
"freedom" "ignorance" "slavery" "strength" "war"
Finalmente, se livrar dos pares que não está interessado, substituindo cada um x
, y
e z
com 1
. Novamente, a simplificação do Mathematica 1*a
é sempre assim a
. Esta parte é feita com:
/.x->1/.y->1/.z->1
O bom é que o Mathematica sabe que a multiplicação é Orderless
assim, e isso encontrará os dois fatores, independentemente de serem adjacentes ao produto ou não. Somente a palavra oposta à entrada não é mais emparelhada no produto, para que não seja removida e permaneça como a única saída.