diff --git a/labs/lab6/desc.json b/labs/lab6/desc.json index 022258a..d1481f4 100644 --- a/labs/lab6/desc.json +++ b/labs/lab6/desc.json @@ -1,14 +1,21 @@ { "number": 6, - "task": "", + "task": "Учитывая массив целых чисел, представляющих цвет каждого носка, определите, сколько пар носков совпадающих цветов существует. Например, есть 7 носков цветов [1, 2, 1, 2, 1, 3, 2]. Остается одна пара цвета 1 и одна пара цвета 2. Осталось три нечетных носка, по одному каждого цвета. Количество пар равно 2. Создайте функцию, которая возвращает целое число, представляющее количество подходящих пар доступных носков.", "vars": [ [ { - "name": "", - "desc": "", + "name": "arr", + "desc": "Массив носков", "data": "" } + ], + [ + { + "name": "arr", + "desc": "Массив носков", + "data": "1 2 1 2 1 3 2" + } ] ], - "complete": false + "complete": true } \ No newline at end of file diff --git a/labs/lab6/main.js b/labs/lab6/main.js index 466be91..54e2742 100644 --- a/labs/lab6/main.js +++ b/labs/lab6/main.js @@ -3,5 +3,32 @@ function main(formName) { let result = document.getElementById("result"); - result.textContent = "Результат: неопределенно"; + let arr = document.forms[formName].elements[0].value; + arr = arr.trim().split(" "); + let checkResult = arr.some( elem => isNotNumber(elem) ); + if (checkResult) { + result.textContent = "Ошибка: arr должен содержать только числа, разделенные пробелом!"; + return; + } else { + arr = arr.map( elem => Number(elem) ); + } + + result.textContent = "Результат: " + countPairs(arr); +} + +function countPairs(arr) { + let map = new Map(); + + for (let num of arr) { + map.set(num, (map.get(num) || 0) + 1); + } + + let result = 0; + map.forEach( val => result += Math.trunc(val / 2) ); + + return result; +} + +function isNotNumber(val) { + return val.replace(/\s/g, '').length === 0 || isNaN(val); }