Was ist der einfachste Weg, um ein dreiseitiges exklusives ODER zu machen?XOR von drei Werten
Mit anderen Worten, ich habe drei Werte, und ich möchte eine Aussage, die zu wahren IFF nur ein der drei Werte ist wahr ist.
Bisher ist es das, was ich habe kommen mit:
(! (A^b) & & (a^c) & & (b & & c)) || (b^a) & & (b^c) & &! (a & & c)) || ((C^a) & & (c^b) & &! (A & & b))
Gibt es etwas einfacher, das Gleiche zu tun?
Hier ist der Beweis dafür, dass die obige Aufgabe erfüllt:
a = true; b = true; c = true
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> false
a = true; b = true; c = false
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> false
a = true; b = false; c = true
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> false
a = true; b = false; c = false
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> true
a = false; b = true; c = true
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> false
a = false; b = true; c = false
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> true
a = false; b = false; c = true
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> true
a = false; b = false; c = false
((a^b) && (a^c) && !(b && c)) || ((b^a) && (b^c) && !(a && c)) || ((c^a) && (c^b) && !(a && b))
=> false
groß, aber die allgemeine Lösung nicht kurzschließen. – Ani
'a? 1: 0' kann vereinfacht werden zu '!! a' – kaspersky
@ gg.kaspersky, nur in JavaScript, C, und Sprachen, die truthy/falsy-Tests über den '!' - Operator haben. Zum Beispiel würde dies in Java oder C# nicht funktionieren. –