Я столкнулся с этой проблемой в Edabit и не смог разработать это побитовое решение.
notNotNot = (a,b) => !!(a%2 >> b)
Соревнование:
//Something which is not true is false, but something which is not not true is true!
//Create a function where given n number of "not", evaluate whether it's true or false.
//Examples:
notNotNot(1, true) ➞ false
// Not true
notNotNot(2, false) ➞ false
// Not not false
notNotNot(6, true) ➞ true
// Not not not not not not true
Я провел некоторое исследование, что этот оператор:
Сдвиг вправо, толкая копии самого левого бита слева, и пусть самые правые биты падают.
То, что я считаю, я понял (например, то 5 >> 1же, 0101 >> 1что оценивает 0010), но я не вижу, как это работает с логическим значением? Я знаю , что имеет trueзначение 1и falseдля 0.
notNotNot(2, true): оно вернется false, но не верно ( !!true) должно быть true...
falseразрешении true.
notNotNot = (a,b) => !!((a%2)^b)вместо этого ...
(a, b) => !!((a + b) % 2)?
true=1(десятичное) =01(двоичное), сдвинутое влево на единицу, приведет к10двоичному или2десятичному.