Mathematica, 84 byte
(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")/#/.x->1/.y->1/.z->1&
Penjelasan
Lebih banyak "aritmatika" dengan string! Seperti dalam jawaban yang ditautkan, ini didasarkan pada fakta bahwa Anda dapat "melipatgandakan" string dalam Mathematica yang akan membuat mereka tidak dievaluasi (mirip dengan mengalikan dua variabel yang tidak ditugaskan x*y
), tetapi bahwa Mathematica akan menerapkan penyederhanaan dasar, seperti membatalkan faktor dalam suatu divisi.
Jadi kita mulai dengan menyimpan tiga pasang sebagai produk dalam x
, y
, z
, masing-masing dan kalikan mereka semua bersama-sama:
(x="war""peace")(y="freedom""slavery")(z="ignorance""strength")
Ini mengevaluasi ke
"freedom" "ignorance" "peace" "slavery" "strength" "war"
(Mathematica secara otomatis mengurutkan faktor, tetapi kami tidak peduli dengan urutannya.)
Kami membaginya dengan input untuk menghapus kata yang tidak kita inginkan .../#
, karena Mathematica membatalkan faktor-faktornya. Misal jika inputnya "peace"
kita akan berakhir dengan:
"freedom" "ignorance" "slavery" "strength" "war"
Akhirnya, kita menyingkirkan pasangan yang tidak kita minati, dengan mengganti masing-masing pasangan x
, y
dan z
dengan 1
. Sekali lagi, penyederhanaan Mathematica 1*a
selalu muncul a
. Bagian ini dilakukan dengan:
/.x->1/.y->1/.z->1
Yang menyenangkan adalah bahwa Mathematica tahu bahwa perkalian adalah Orderless
jadi ini akan menemukan dua faktor terlepas dari apakah mereka berdekatan dalam produk atau tidak. Hanya kata yang berseberangan dengan input yang tidak lagi dipasangkan dalam produk, sehingga satu tidak akan dihapus dan tetap sebagai output tunggal.