So, it can get a bit confusing, but it's doable with `xor`ing your values: const xor = (a, b) => !a ^ !b; const onlyOne = (a, b, c) => xor(xor(xor(a, b), c), a && b && c) Sure doing a straight `xor` on all 3 values leaves room for them all to be true, but then we just `xor` that value in to get our results. [![enter image description here][2]][2] Also, the reason `xor(a, b) != a ^ b` is to convert those values to boolean beforehand. It's nice that with booleans `a ^ b === !a ^ !b`. [2]: https://i.sstatic.net/ihNFS.png