From ee8eb58145838a051b72d7a1d2358c4bf1a78db9 Mon Sep 17 00:00:00 2001 From: dwe11er <147369744+dwe11er@users.noreply.github.com> Date: Mon, 11 Dec 2023 14:47:20 +0500 Subject: [PATCH] Update core.js --- src/core.js | 106 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 96 insertions(+), 10 deletions(-) diff --git a/src/core.js b/src/core.js index 9235599..44a0036 100644 --- a/src/core.js +++ b/src/core.js @@ -1,23 +1,61 @@ //Напишите функцию, которая проверяет, является ли число целым используя побитовые операторы -function isInteger(n) {} +function isInteger(n) { + return (n | 0) === n; +} //Напишите функцию, которая возвращает массив четных чисел от 2 до 20 включительно -function even() {} +function even() { + const result = []; + for (let i = 2; i <= 20; i += 2) { + result.push(i); + } + return result; +} //Напишите функцию, считающую сумму чисел до заданного используя цикл -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; + } + return n + recSumTo(n - 1); +} //Напишите функцию, считающую факториал заданного числа -function factorial(n) {} +function factorial(n) { + if (n === 0) { + return 1; + } + return n * factorial(n - 1); +} //Напишите функцию, которая определяет, является ли число двойкой, возведенной в степень -function isBinary(n) {} +function isBinary(n) { + return (n & (n - 1)) === 0 && n !== 0; +} //Напишите функцию, которая находит N-е число Фибоначчи -function fibonacci(n) {} +function fibonacci(n) { + if (n <= 1) { + return n; + } + let a = 0; + let b = 1; + for (let i = 2; i <= n; i++) { + const temp = a + b; + a = b; + b = temp; + } + return b; +} /** Напишите функцию, которая принимает начальное значение и функцию операции * и возвращает функцию - выполняющую эту операцию. @@ -30,7 +68,15 @@ function fibonacci(n) {} * console.log(sumFn(5)) - 15 * console.log(sumFn(3)) - 18 */ -function getOperationFn(initialValue, operatorFn) {} +function getOperationFn(initialValue, operatorFn) { + if (!operatorFn) { + return (newValue) => initialValue; + } + return (newValue) => { + initialValue = operatorFn(initialValue, newValue); + return initialValue; + }; +} /** * Напишите функцию создания генератора арифметической последовательности. @@ -48,7 +94,13 @@ function getOperationFn(initialValue, operatorFn) {} * console.log(generator()); // 7 * console.log(generator()); // 9 */ -function sequence(start, step) {} +function sequence(start = 0, step = 1) { + return function generator() { + const current = start; + start += step; + return current; + }; +} /** * Напишите функцию deepEqual, которая принимает два значения @@ -64,7 +116,41 @@ 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 ( + typeof firstObject !== 'object' || + firstObject === null || + typeof secondObject !== 'object' || + secondObject === null + ) { + if (Number.isNaN(firstObject) && Number.isNaN(secondObject)) { + return true; + } + return false; + } + + const keys1 = Object.keys(firstObject); + const keys2 = Object.keys(secondObject); + + if (keys1.length !== keys2.length) { + return false; + } + + for (let key of keys1) { + if ( + !keys2.includes(key) || + !deepEqual(firstObject[key], secondObject[key]) + ) { + return false; + } + } + + return true; +} module.exports = { isInteger,