From 7584ace6f0270a0029808730eb094e3b7f99ddd2 Mon Sep 17 00:00:00 2001 From: katrinSergeevna22 <139552093+katrinSergeevna22@users.noreply.github.com> Date: Mon, 27 Nov 2023 01:58:11 +0500 Subject: [PATCH] Update core.js --- src/core.js | 107 +++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 97 insertions(+), 10 deletions(-) diff --git a/src/core.js b/src/core.js index 9235599..bf948aa 100644 --- a/src/core.js +++ b/src/core.js @@ -1,23 +1,69 @@ //Напишите функцию, которая проверяет, является ли число целым используя побитовые операторы -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) +{ + if (n <= 0) return 0; + 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 || n === 1) + return 1; + return n*factorial(n-1) +} //Напишите функцию, которая определяет, является ли число двойкой, возведенной в степень -function isBinary(n) {} +function isBinary(n) +{ + let value = 1 + while (value <= n) { + if (value === n) { + return true + } + value = value << 1 + } + return false +} //Напишите функцию, которая находит N-е число Фибоначчи -function fibonacci(n) {} +function fibonacci(n) +{ + let arr = []; + arr[0] = 1; + arr[1] = 1; + for (let i = 2; i < n; i ++) { + arr[i] = arr[i-1] + arr[i-2]; + } + return arr[n - 1]; + +} /** Напишите функцию, которая принимает начальное значение и функцию операции * и возвращает функцию - выполняющую эту операцию. @@ -30,7 +76,14 @@ function fibonacci(n) {} * console.log(sumFn(5)) - 15 * console.log(sumFn(3)) - 18 */ -function getOperationFn(initialValue, operatorFn) {} +function getOperationFn(initialValue, operatorFn = (a, b) => a) +{ + let storedValue = initialValue; + return function (newValue) { + storedValue = operatorFn(storedValue, newValue); + return storedValue; + } +} /** * Напишите функцию создания генератора арифметической последовательности. @@ -48,7 +101,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 generator() { + const value = currentValue; + currentValue += step; + return value; + } +} /** * Напишите функцию deepEqual, которая принимает два значения @@ -64,7 +124,34 @@ 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 + } + const firstKeys = Object.keys(firstObject); + const secondKeys = Object.keys(secondObject); + + if (firstKeys.length !== secondKeys.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,