Cách đơn giản nhất để thực hiện OR độc quyền ba chiều là gì?XOR của ba giá trị
Nói cách khác, tôi có ba giá trị và tôi muốn một tuyên bố đánh giá đúng IFF chỉ một trong ba giá trị là đúng.
Cho đến nay, đây là những gì tôi đã đưa ra:
(! (A^b) & & (a^c) & & (b & & c)) || ((b^a) & & (b^c) & &! (a & & c)) || ((C^a) & & (c^b) & &! (Một & & b))
Có một cái gì đó đơn giản để làm điều tương tự?
Đây là bằng chứng cho thấy ở trên hoàn thành nhiệm vụ:
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
Tuyệt vời, nhưng các giải pháp chung không ngắn mạch. – Ani
'a? 1: 0' có thể được đơn giản hóa thành '!! a' – kaspersky
@ gg.kaspersky, chỉ bằng JavaScript, C và các ngôn ngữ có kiểm tra sự thật/sai thông qua toán tử'! '. Ví dụ, điều này sẽ không hoạt động trong Java hoặc C#. –