From 5cb6241a0b787a81be56f9aec50667b419823013 Mon Sep 17 00:00:00 2001 From: Krio Date: Tue, 7 Sep 2021 11:21:40 +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=207?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- labs/lab7/desc.json | 37 +++++++++++++++++++++++++---- labs/lab7/main.js | 58 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 90 insertions(+), 5 deletions(-) diff --git a/labs/lab7/desc.json b/labs/lab7/desc.json index 045e1ed..8636b68 100644 --- a/labs/lab7/desc.json +++ b/labs/lab7/desc.json @@ -1,14 +1,43 @@ { "number": 7, - "task": "", + "task": "Создайте функцию, которая возвращает количество чисел палиндрома в указанном диапазоне (включительно). Например, между 8 и 34 имеется 5 палиндромов: 8, 9, 11, 22 и 33. Между 1550 и 1552 годами существует ровно один палиндром: 1551. Т.к. в условии не оговорен случай отрицательных чисел, то такие числа не будут рассматриваться отдельно, т.к. чисел вида '-11-' не существует. При указании в качестве начала диапазона вещественного числа, в список проверяемых чисел попадут только вещественные числа, для которых накладывается дополнительное условие в виде расположения разделительной точки ровно в середине числа.", "vars": [ [ { - "name": "", - "desc": "", + "name": "a", + "desc": "Начало диапазона", "data": "" + }, + { + "name": "b", + "desc": "Конец диапазона", + "data": "" + } + ], + [ + { + "name": "a", + "desc": "Начало диапазона", + "data": "8" + }, + { + "name": "b", + "desc": "Конец диапазона", + "data": "34" + } + ], + [ + { + "name": "a", + "desc": "Начало диапазона", + "data": "1550" + }, + { + "name": "b", + "desc": "Конец диапазона", + "data": "1552" } ] ], - "complete": false + "complete": true } \ No newline at end of file diff --git a/labs/lab7/main.js b/labs/lab7/main.js index 466be91..e4436ca 100644 --- a/labs/lab7/main.js +++ b/labs/lab7/main.js @@ -3,5 +3,61 @@ function main(formName) { let result = document.getElementById("result"); - result.textContent = "Результат: неопределенно"; + let a = document.forms[formName].elements[0].value; + if (isNotNumber(a)) { + result.textContent = "Ошибка: a не является числом!"; + return; + } else { + a = Number(a); + } + + let b = document.forms[formName].elements[1].value; + if (isNotNumber(b)) { + result.textContent = "Ошибка: b не является числом!"; + return; + } else { + b = Number(b); + } + + if (a > b) { + result.textContent = "Ошибка: a не может быть больше b"; + return; + } + + result.textContent = "Результат: " + countPalindrome(a, b); +} + +function countPalindrome(a, b) { + let result = 0; + + let gen = makeRangeIterator(a, b); + for (let num of gen) { + if (isPalindrome(num)) { + result++; + } + } + + return result; +} + +function isPalindrome(num) { + let strNumber = num.toString(); + for (let i = 0; i <= strNumber.length / 2; i++) { + let lastIndex = strNumber.length - 1 -i; + if (strNumber[i] != strNumber[lastIndex]) { + return false; + } + } + return true; } + +function isNotNumber(val) { + return val.replace(/\s/g, '').length === 0 || isNaN(val); +} + +function* makeRangeIterator(start, end) { + for (let i = start; i < end; i++) { + yield i; + } + return end; +} \ No newline at end of file