praca-test-tasks/4.nodejs_js/readme.md
2023-03-12 13:58:18 +03:00

2.8 KiB
Raw Blame History

Блок заданий "Задание, Java Script, Node JS:" (4)

  1. Напишите на js функцию, которая принимает два аргумента: массив из уникальных целых чисел и сумму в виде целого числа. Если сумма двух любых чисел массива из аргумента равна числу, которое приходит вторым аргументом, функция должна вернуть новый массив из этих двух чисел в любом порядке. Если решения нет, вернуть пустой массив. Текущее число само с собой складывать нельзя. Пример входных данных:
array = [3, 5, -4, 8, 11, 1, -1, 6]
targetSum = 10

На выходе:

[-1, 11]

или

[11, -1]

так как

-1 + 11 = 10 = targetSum

Код написанной функции прокомментируйте.

Алгоритм

Алгоритм будет заключаться в переборе всех значений массива с вычетом из входного параметра с целью поиска полученного значения в массиве:

: [3, 5, -4, 8, 11, 1, -1, 6], 10
---------------------------------
>> 10 - 3 = 7      | false
>> 10 - 5 = 5      | false
>> 10 - (-4) = -14 | false
>> 10 - 8 = 2      | false
>> 10 - 11 = -1    | true
---------------------------------
<< [11, -1]

Реализация

function isInt (value) {  // Функция проверки целочисленного типа
	if (typeof(value) == 'number') {
		return parseInt(value) == value;
	}
	else {
		return false;
	}
}

function isArray (value, typeCheck=null) {  // Функция проверки типа массива
	if (!Array.isArray(value)) {
		return false;
	}
	else if (typeCheck == null) {
		return true
	}
	else {
		for (let i in value) {
			if (!typeCheck(value[i])) {
				return false;
			}
		}
		return true;
	}
}

function getTwoSummands (array, findValue) {
	if (isInt(findValue) && isArray(array, isInt)) {  // Вы же ещё помните, что javascript - язык с динамической, а не статической типизацией данных?
		let calculatedVal;
		for (let i in array) {
			calculatedVal = findValue - array[i];
			if (array.indexOf(calculatedVal) != -1 && array.indexOf(calculatedVal) != i) {  // Проверим есть ли значение в массиве и имеет ли данное значение рассматриваемый индекс.
				return [array[i], calculatedVal];
			}
		}
		return [];
	}
	else {
		throw new Error("Wrong arguments: <Array(int)>, <int>");
	}
}