From d29a11372db07007a64e269003fa2075e3b373af Mon Sep 17 00:00:00 2001 From: veronirik <93537637+veronirik@users.noreply.github.com> Date: Sun, 3 Dec 2023 15:57:47 +0500 Subject: [PATCH] Add files via upload --- src/core.js | 105 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 94 insertions(+), 11 deletions(-) diff --git a/src/core.js b/src/core.js index 9235599..afde557 100644 --- a/src/core.js +++ b/src/core.js @@ -1,23 +1,62 @@ //Напишите функцию, которая проверяет, является ли число целым используя побитовые операторы -function isInteger(n) {} +function isInteger(n) { + return (n | 0) === n; +} //Напишите функцию, которая возвращает массив четных чисел от 2 до 20 включительно -function even() {} +function even() { + let arr = []; + for (let i = 2; i <= 20; i += 2) { + arr.push(i); + } + return arr; +} //Напишите функцию, считающую сумму чисел до заданного используя цикл -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 === 0) { + return 0; + } + return n + recSumTo(n - 1); +} //Напишите функцию, считающую факториал заданного числа -function factorial(n) {} +function factorial(n) { + let fact = 1; + while (n > 1) { + fact *= n; + n -= 1; + } + return fact; +} //Напишите функцию, которая определяет, является ли число двойкой, возведенной в степень -function isBinary(n) {} +function isBinary(n) { + if (n < 1) { + return false; + } + return (n & (n -1)) === 0; +} //Напишите функцию, которая находит N-е число Фибоначчи -function fibonacci(n) {} +function fibonacci(n) { + var fib = [0, 1] // Первые два элемента последовательности Фибоначчи + + for (i = 2; i <= n; i++) { + // Получим i-й элемент последовательности как сумму предыдущих двух + fib.push(fib[i - 1] + fib[i - 2]); + } + return fib[n]; +} /** Напишите функцию, которая принимает начальное значение и функцию операции * и возвращает функцию - выполняющую эту операцию. @@ -30,7 +69,17 @@ function fibonacci(n) {} * console.log(sumFn(5)) - 15 * console.log(sumFn(3)) - 18 */ -function getOperationFn(initialValue, operatorFn) {} +function getOperationFn(initialValue, operatorFn) { + let result = initialValue; + + return function (value) { + if (operatorFn) { + return (result = operatorFn(result, value)); + } else { + return result; + } + }; +} /** * Напишите функцию создания генератора арифметической последовательности. @@ -48,7 +97,16 @@ function getOperationFn(initialValue, operatorFn) {} * console.log(generator()); // 7 * console.log(generator()); // 9 */ -function sequence(start, step) {} +function sequence(start = 0, step = 1) { + let current = start; + + function generator() { + const valueToReturn = current; + current += step; + return valueToReturn; + } + return generator; +} /** * Напишите функцию deepEqual, которая принимает два значения @@ -64,7 +122,32 @@ 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 (Number.isNaN(firstObject) && Number.isNaN(secondObject)) { + return true; + } + + if (typeof firstObject !== 'object' || typeof secondObject !== 'object') { + return false; + } + const firstKeys = Object.keys(firstObject); + const secondKeys = Object.keys(secondObject); + if (firstKeys.length !== secondKeys.length) { + return false; + } + + for (const key of firstKeys) { + if (!(secondKeys.includes(key) && deepEqual(firstObject[key], secondObject[key]))) { + return false; + } + } + + return true; +} module.exports = { isInteger, @@ -77,4 +160,4 @@ module.exports = { getOperationFn, sequence, deepEqual, -}; +}; \ No newline at end of file