Я зіткнувся з цим завданням на 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десяткове.