diff --git a/src/core.js b/src/core.js index 9235599..d913589 100644 --- a/src/core.js +++ b/src/core.js @@ -1,23 +1,69 @@ //Напишите функцию, которая проверяет, является ли число целым используя побитовые операторы -function isInteger(n) {} +function isInteger(n) { + return ~~n == n +} //Напишите функцию, которая возвращает массив четных чисел от 2 до 20 включительно -function even() {} +function even() { + let array = [] + for (let i=2; i<=20; i++){ + if (i%2 == 0){ + array.push(i) + } + } + return array +} //Напишите функцию, считающую сумму чисел до заданного используя цикл -function sumTo(n) {} +function sumTo(n) { + let result = 0 + for(let i=0; i<=n; i++){ + result += i + } + return result +} //Напишите функцию, считающую сумму чисел до заданного используя рекурсию -function recSumTo(n) {} +function recSumTo(n) { + if (n === 0) { + return 0 + } + return n + recSumTo(n - 1) +} //Напишите функцию, считающую факториал заданного числа -function factorial(n) {} +function factorial(n) { + let f = 1 + let k = 1 + while (k <= n) { + f *= k++ + } + return f +} //Напишите функцию, которая определяет, является ли число двойкой, возведенной в степень -function isBinary(n) {} +function isBinary(n) { + let k = 0; + while (k <= n) + { + if ((2**k) == n) + { + return true; + } + k++; + } + return false; +} //Напишите функцию, которая находит N-е число Фибоначчи -function fibonacci(n) {} +function fibonacci(n) { + if (n == 1 || n == 2) { + return 1 + } + else { + return fibonacci(n-1) + fibonacci(n-2) + } +} /** Напишите функцию, которая принимает начальное значение и функцию операции * и возвращает функцию - выполняющую эту операцию. @@ -30,7 +76,15 @@ function fibonacci(n) {} * console.log(sumFn(5)) - 15 * console.log(sumFn(3)) - 18 */ -function getOperationFn(initialValue, operatorFn) {} +function getOperationFn(initialValue, operatorFn) { + let currentValue = initialValue + return res => { + if (operatorFn !== undefined) { + currentValue = operatorFn(currentValue, res) + } + return currentValue + } +} /** * Напишите функцию создания генератора арифметической последовательности. @@ -48,7 +102,20 @@ function getOperationFn(initialValue, operatorFn) {} * console.log(generator()); // 7 * console.log(generator()); // 9 */ -function sequence(start, step) {} +function sequence(start, step) { + if (start === undefined) { + start = 0 + } + if (step === undefined) { + step = 1 + } + let current = start + return res => { + let logged = current + current += step + return logged + } +} /** * Напишите функцию deepEqual, которая принимает два значения @@ -64,7 +131,30 @@ function sequence(start, step) {} * deepEqual({arr: [22, 33], text: 'text'}, {arr: [22, 33], text: 'text'}) // true * deepEqual({arr: [22, 33], text: 'text'}, {arr: [22, 3], text: 'text2'}) // false */ -function deepEqual(firstObject, secondObject) {} +function deepEqual(firstObject, secondObject) { + if (firstObject === secondObject) { + return true + } + if (firstObject !== firstObject || secondObject !== secondObject) { + return isNaN(firstObject) && isNaN(secondObject) + } + if (!((typeof firstObject == "object" && firstObject != null) && (typeof secondObject == "object" && secondObject != null))) { + return false + } + if (Object.keys(firstObject).length != Object.keys(secondObject).length) { + return false + } + for(let val in firstObject) { + if (!(val in secondObject)) { + return false + } + if (!(deepEqual(firstObject[val], secondObject[val]))) { + return false + } + } + + return true +} module.exports = { isInteger, diff --git "a/\320\241\320\272\321\200\320\270\320\275 \321\201 \321\202\320\265\321\201\321\202\320\260\320\274\320\270.png" "b/\320\241\320\272\321\200\320\270\320\275 \321\201 \321\202\320\265\321\201\321\202\320\260\320\274\320\270.png" new file mode 100644 index 0000000..89feac1 Binary files /dev/null and "b/\320\241\320\272\321\200\320\270\320\275 \321\201 \321\202\320\265\321\201\321\202\320\260\320\274\320\270.png" differ