diff --git a/src/core.js b/src/core.js index 9235599..7714815 100644 --- a/src/core.js +++ b/src/core.js @@ -1,23 +1,75 @@ //Напишите функцию, которая проверяет, является ли число целым используя побитовые операторы -function isInteger(n) {} +function isInteger(n) { + return(n | 1)===n; +} //Напишите функцию, которая возвращает массив четных чисел от 2 до 20 включительно -function even() {} +function even() { + const myArray =[] + for (let i =2 ; i <= 20; i +=2){ + myArray.push(i) + } + return myArray; + +} //Напишите функцию, считающую сумму чисел до заданного используя цикл -function sumTo(n) {} +function sumTo(n) { + let sum = 0; + for (let i =1; i<=n; i++) { + sum +=i; + } + return sum; +} //Напишите функцию, считающую сумму чисел до заданного используя рекурсию -function recSumTo(n) {} +function recSumTo(n) { + if(n===1){ + return 1; + } + else{ + return n + recSumTo(n-1); + } +} //Напишите функцию, считающую факториал заданного числа -function factorial(n) {} +function factorial(n) { + if(n===0 || n===1){ + return 1 + } + else{ + let result = 1; + for(let i = 2; i<=n; i++ ){ + result *=i; + } + return result + + } +} //Напишите функцию, которая определяет, является ли число двойкой, возведенной в степень -function isBinary(n) {} +function isBinary(n) { + if(n<=0){ + return false; + } + while(n >1){ + if(n % 2 !==0){ + return false; + } + n/=2; + } + return true; +} //Напишите функцию, которая находит N-е число Фибоначчи -function fibonacci(n) {} +function fibonacci(n) { + let fib = [0, 1]; + + for (let i = 2; i <= n; i++){ + fib[i] = fib[i - 1] + fib[ i - 2]; + } + return fib[n]; +} /** Напишите функцию, которая принимает начальное значение и функцию операции * и возвращает функцию - выполняющую эту операцию. @@ -30,7 +82,16 @@ function fibonacci(n) {} * console.log(sumFn(5)) - 15 * console.log(sumFn(3)) - 18 */ -function getOperationFn(initialValue, operatorFn) {} +function getOperationFn(initialValue, operatorFn) { + if (typeof operatorFn != 'function'){ + return ()=> initialValue; + } + return (newValue)=> { + initialValue= operatorFn(initialValue,newValue); + return initialValue; + }; +} + /** * Напишите функцию создания генератора арифметической последовательности. @@ -48,7 +109,14 @@ function getOperationFn(initialValue, operatorFn) {} * console.log(generator()); // 7 * console.log(generator()); // 9 */ -function sequence(start, step) {} +function sequence(start = 0 , step = 1) { + let currentValue= start; + return function(){ + const result = currentValue; + currentValue += step; + return result; + }; +} /** * Напишите функцию deepEqual, которая принимает два значения @@ -64,9 +132,46 @@ 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) { + /* console.log(JSON.stringify(firstObject)); + console.log( JSON.stringify(secondObject)); + if(JSON.stringify(firstObject) === JSON.stringify(secondObject)){ + // alert('ok'); + return true; + }else { + return false; + } + */ + if (firstObject === secondObject) { + return true; + } + + if (typeof firstObject !== 'object' || typeof secondObject !== 'object'|| + firstObject=== null|| secondObject===null) { + if(Number.isNaN(firstObject) && Number.isNaN(secondObject)){ + return true + } + return firstObject === secondObject ; + } + + + const keysFirst = Object.keys(firstObject); + const keysSecond = Object.keys(secondObject); + + if (keysFirst.length !== keysSecond.length) { + return false; + } + + for (const key of keysFirst) { + if (!deepEqual(firstObject[key], secondObject[key])) { + return false; + } + } + + return true; +} -module.exports = { +module.exports= { isInteger, even, sumTo,