수학, 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
때문에 제품에서 인접 여부에 관계없이 두 가지 요소를 찾을 수 있다는 것입니다. 입력과 반대되는 단어 만 더 이상 제품에서 쌍을 이루지 않으므로 단어가 제거되지 않고 유일한 출력으로 유지됩니다.