diff --git a/labs/lab1/desc.json b/labs/lab1/desc.json new file mode 100644 index 0000000..afe615b --- /dev/null +++ b/labs/lab1/desc.json @@ -0,0 +1,44 @@ +{ + "number": "1", + "tasK": "Создайте функцию, которая принимает массив чисел arr и число n. Верните true, если сумма любых двух элементов равна заданному числу. В противном случае верните false.", + "vars": [ + [ + { + "name": "arr", + "desc": "Массив исходных чисел, разделенных пробелом", + "data": "" + }, + { + "name": "n", + "desc": "Требуемая сумма", + "data": "" + } + ], + [ + { + "name": "arr", + "desc": "Массив исходных чисел, разделенных пробелом", + "data": "1 2 3" + }, + { + "name": "n", + "desc": "Требуемая сумма", + "data": "4" + } + ], + [ + { + "name": "arr", + "desc": "Массив исходных чисел, разделенных пробелом", + "data": "1 2 3" + }, + { + "name": "n", + "desc": "Требуемая сумма", + "data": "1" + } + ] + ], + "scriptpath": "labs/lab1/main.js", + "complete": true +} \ No newline at end of file diff --git a/labs/lab1/main.js b/labs/lab1/main.js new file mode 100644 index 0000000..340eda2 --- /dev/null +++ b/labs/lab1/main.js @@ -0,0 +1,41 @@ +"use strict"; + +function main(formName) { + let arr = document.forms[formName].elements[0].value; + arr = arr.split(" "); + let result = arr.some( elem => isNotNumber(elem) ); + if (result) { + alert("arr должен содержать только числа, разделенные пробелом!"); + return; + } else { + arr = arr.map( elem => Number(elem) ); + } + + let n = document.forms[formName].elements[1].value; + if (isNotNumber(n)) { + alert("n не является числом!"); + return; + } else { + n = Number(n); + } + + alert( "Результат: " + hasPairForSum(arr, n) ); +} + +function hasPairForSum(arr, n) { + let map = new Map(); + + for (let num of arr) { + if (map.has(n - num)) { + return true; + } else { + map.set(num, null) + } + } + + return false; +} + +function isNotNumber(val) { + return val.replace(/\s/g, '').length === 0 || isNaN(val); +} \ No newline at end of file