From 30bb1defa64e772d3aca634d4fb25e0da573038c Mon Sep 17 00:00:00 2001 From: Krio Date: Tue, 7 Sep 2021 10:16:58 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=206?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- labs/lab6/desc.json | 15 +++++++++++---- labs/lab6/main.js | 29 ++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 5 deletions(-) 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); }