From 2970b8d8823d5c3b1885cea1d3fcacd9198c9a61 Mon Sep 17 00:00:00 2001 From: grishbar <32193933+grishbar@users.noreply.github.com> Date: Sat, 23 Mar 2019 16:00:39 +0500 Subject: [PATCH 1/6] first version probablu woud be dead on linting --- warmup.js | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 127 insertions(+), 7 deletions(-) diff --git a/warmup.js b/warmup.js index eefda9891..e0aaf617a 100644 --- a/warmup.js +++ b/warmup.js @@ -8,7 +8,10 @@ * @returns {Number} Сумма аргументов */ function abProblem(a, b) { - // Ваше решение + if (!isNaN(parseFloat(a)) && isFinite(a) && !isNaN(parseFloat(b)) && isFinite(b)) { + return a + b; + } + throw new TypeError(); } /** @@ -19,6 +22,15 @@ function abProblem(a, b) { * @returns {Number} Век, полученный из года */ function centuryByYearProblem(year) { + if (!(!isNaN(parseFloat(year)) && isFinite(year))) { + throw new TypeError(); + } + if (year < 0) { + throw new RangeError(); + } + + return Math.ceil((year + 1) / 100); + // Ваше решение } @@ -30,6 +42,28 @@ function centuryByYearProblem(year) { * @returns {String} Цвет в формате RGB, например, '(255, 255, 255)' */ function colorsProblem(hexColor) { + if (typeof hexColor !== 'string') { + throw new TypeError(); + } + // let hexColorArr = hexColor.split(); + if (hexColor.length !== 7) { + throw new RangeError(); + } + + /** + *for (i = 1; i < hexColorArr.length; i++) { + * + * if (hexColor[i] < 'F' || hexColor[i] < 9) { + * throw new RangeError(); + * } + *} + */ + let bigint = parseInt(hexColor.split('#')[1], 16); + let r = (bigint > 16) && 255; + let g = (bigint > 8) && 255; + let b = bigint && 255; + + return '(' + r + ', ' + g + ', ' + b + ')'; // Ваше решение } @@ -41,7 +75,22 @@ function colorsProblem(hexColor) { * @returns {Number} Число Фибоначчи, находящееся на n-ой позиции */ function fibonacciProblem(n) { - // Ваше решение + let a = 0; + let b = 1; + if (Number.isNaN(n)) { + throw new TypeError(); + } + if (n >= 2) { + for (let i = 1; i < Math.trunc(n / 2) + 1; i++) { + a = a + b; + b = a = b; + } + } + if (n % 2 === 0) { + return a; + } + + return b; } /** @@ -51,7 +100,21 @@ function fibonacciProblem(n) { * @returns {(Any[])[]} Транспонированная матрица размера NxM */ function matrixProblem(matrix) { - // Ваше решение + for (let k = 0; k < matrix.length; k++) { + if (matrix[k].length !== matrix[matrix.length - 1].length) { + throw new TypeError(); + } + } + let temp; + for (let i = 0; i < matrix.length; i++) { + for (let j = 0; j < matrix[0].length; j++) { + temp = matrix[i][j]; + matrix[i][j] = matrix[j][i]; + matrix[j][i] = temp; + } + } + + return matrix; } /** @@ -63,7 +126,22 @@ function matrixProblem(matrix) { * @returns {String} Число n в системе счисления targetNs */ function numberSystemProblem(n, targetNs) { - // Ваше решение + if (!(!isNaN(parseFloat(n)) && isFinite(n) && !isNaN(parseFloat(targetNs)) && + isFinite(targetNs))) { + throw new TypeError(); + } + if (targetNs < 2 || targetNs > 36) { + throw new RangeError(); + } + let numbers = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); + let result = 0; + let nToArray = numbers.slice(0, targetNs); + n = String(n); + for (let i = 0; i < n.length; i++) { + result = result + (nToArray.indexOf(n.substr(n.length - i - 1, 1)) * Math.pow(targetNs, i)); + } + + return String(result); } /** @@ -72,7 +150,11 @@ function numberSystemProblem(n, targetNs) { * @returns {Boolean} Если соответствует формату, то true, а иначе false */ function phoneProblem(phoneNumber) { - // Ваше решение + if (phoneNumber.length === 15 && phoneNumber.substring(0, 6) === '8–800–' && + phoneNumber[9] === '-' && phoneNumber[12] === '-' && + !isNaN(parseFloat(phoneNumber.substr(6, 3)))) { + return true; + } } /** @@ -82,7 +164,17 @@ function phoneProblem(phoneNumber) { * @returns {Number} Количество улыбающихся смайликов в строке */ function smilesProblem(text) { - // Ваше решение + if (typeof(text) !== 'string') { + throw new TypeError(); + } + let k = 0; + for (let i = 0; i < text.length; i++) { + if (text[i] === ')') { + k++; + } + } + + return k; } /** @@ -92,9 +184,37 @@ function smilesProblem(text) { * @returns {'x' | 'o' | 'draw'} Результат игры */ function ticTacToeProblem(field) { - // Ваше решение + let toright = true; + let toDown = true; + let diaogonal = true; + let reverseDiagonal = true; + let torighto = true; + let toDowno = true; + let diaogonalo = true; + let reverseDiagonalo = true; + for (let i = 0; i < 3; i++) { + for (let j = 0; j < 3; j++) { + toright &= (field[j][i] == 'x'); + toDown &= (field[i][j] == 'x'); + torighto &= (field[j][i] == 'o'); + toDowno &= (field[i][j] == 'o'); + } + diaogonal &= (field[2 - i][2 - i] == 'x'); + reverseDiagonal &= (field[2 - i][i] == 'x'); + diaogonalo &= (field[2 - i][2 - i] == 'o'); + reverseDiagonalo &= (field[2 - i][i] == 'o'); + } + if (toright || toDown || diaogonal || reverseDiagonal) { + return 'x'; + } + if (torighto || toDowno || diaogonalo || reverseDiagonalo) { + return 'o'; + } + + return 'draw'; } + module.exports = { abProblem, centuryByYearProblem, From c5aa239ef0412c239c3c90e28367d9a16748e2fb Mon Sep 17 00:00:00 2001 From: grishbar <32193933+grishbar@users.noreply.github.com> Date: Sat, 23 Mar 2019 17:15:23 +0500 Subject: [PATCH 2/6] 2 version, fixed linting --- warmup.js | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/warmup.js b/warmup.js index e0aaf617a..ad987187d 100644 --- a/warmup.js +++ b/warmup.js @@ -45,13 +45,13 @@ function colorsProblem(hexColor) { if (typeof hexColor !== 'string') { throw new TypeError(); } - // let hexColorArr = hexColor.split(); + // let hexColorfield = hexColor.split(); if (hexColor.length !== 7) { throw new RangeError(); } /** - *for (i = 1; i < hexColorArr.length; i++) { + *for (i = 1; i < hexColorfield.length; i++) { * * if (hexColor[i] < 'F' || hexColor[i] < 9) { * throw new RangeError(); @@ -135,10 +135,11 @@ function numberSystemProblem(n, targetNs) { } let numbers = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); let result = 0; - let nToArray = numbers.slice(0, targetNs); + let nTofielday = numbers.slice(0, targetNs); n = String(n); for (let i = 0; i < n.length; i++) { - result = result + (nToArray.indexOf(n.substr(n.length - i - 1, 1)) * Math.pow(targetNs, i)); + result = result + (nTofielday.indexOf(n.substr(n.length - i - 1, 1)) * + Math.pow(targetNs, i)); } return String(result); @@ -184,31 +185,22 @@ function smilesProblem(text) { * @returns {'x' | 'o' | 'draw'} Результат игры */ function ticTacToeProblem(field) { - let toright = true; - let toDown = true; - let diaogonal = true; - let reverseDiagonal = true; - let torighto = true; - let toDowno = true; - let diaogonalo = true; - let reverseDiagonalo = true; + function isWin(a, b, c) { + return a !== 0 && a === b && a === c; + } for (let i = 0; i < 3; i++) { - for (let j = 0; j < 3; j++) { - toright &= (field[j][i] == 'x'); - toDown &= (field[i][j] == 'x'); - torighto &= (field[j][i] == 'o'); - toDowno &= (field[i][j] == 'o'); + if (isWin(field[0][i], field[1][i], field[2][i])) { + return field[0][i]; + } + if (isWin(field[i][0], field[i][1], field[i][2])) { + return field[i][0]; } - diaogonal &= (field[2 - i][2 - i] == 'x'); - reverseDiagonal &= (field[2 - i][i] == 'x'); - diaogonalo &= (field[2 - i][2 - i] == 'o'); - reverseDiagonalo &= (field[2 - i][i] == 'o'); } - if (toright || toDown || diaogonal || reverseDiagonal) { - return 'x'; + if (isWin(field[0][0], field[1][1], field[2][2])) { + return field[0][0]; } - if (torighto || toDowno || diaogonalo || reverseDiagonalo) { - return 'o'; + if (isWin(field[0][2], field[1][1], field[2][1])) { + return field[0][2]; } return 'draw'; From 37018ded5ec08c6c21897ba2427d89f088198c3b Mon Sep 17 00:00:00 2001 From: grishbar <32193933+grishbar@users.noreply.github.com> Date: Sat, 23 Mar 2019 22:40:54 +0500 Subject: [PATCH 3/6] fix problems with basic tests --- warmup.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/warmup.js b/warmup.js index ad987187d..c5c638595 100644 --- a/warmup.js +++ b/warmup.js @@ -107,7 +107,7 @@ function matrixProblem(matrix) { } let temp; for (let i = 0; i < matrix.length; i++) { - for (let j = 0; j < matrix[0].length; j++) { + for (let j = 0; j < i; j++) { temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; @@ -134,15 +134,15 @@ function numberSystemProblem(n, targetNs) { throw new RangeError(); } let numbers = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split(''); - let result = 0; - let nTofielday = numbers.slice(0, targetNs); - n = String(n); - for (let i = 0; i < n.length; i++) { - result = result + (nTofielday.indexOf(n.substr(n.length - i - 1, 1)) * - Math.pow(targetNs, i)); + let result = ''; + let numbersArray = numbers.slice(0, targetNs); + while (n > 0) { + result = String(result) + numbersArray[n % targetNs]; + n = Math.floor(n / targetNs); } - return String(result); + return result.split('').reverse() + .join(''); } /** @@ -151,11 +151,13 @@ function numberSystemProblem(n, targetNs) { * @returns {Boolean} Если соответствует формату, то true, а иначе false */ function phoneProblem(phoneNumber) { - if (phoneNumber.length === 15 && phoneNumber.substring(0, 6) === '8–800–' && + if (phoneNumber.length === 15 && phoneNumber.indexOf('8-800-') === 0 && phoneNumber[9] === '-' && phoneNumber[12] === '-' && !isNaN(parseFloat(phoneNumber.substr(6, 3)))) { return true; } + + return false; } /** @@ -217,4 +219,4 @@ module.exports = { phoneProblem, smilesProblem, ticTacToeProblem -}; +}; \ No newline at end of file From 111a1fae70a5d097e065b6330b3ebfc3068594bf Mon Sep 17 00:00:00 2001 From: grishbar <32193933+grishbar@users.noreply.github.com> Date: Sat, 23 Mar 2019 22:42:50 +0500 Subject: [PATCH 4/6] forget about new line at the end) add it --- warmup.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/warmup.js b/warmup.js index c5c638595..258cecb8c 100644 --- a/warmup.js +++ b/warmup.js @@ -219,4 +219,4 @@ module.exports = { phoneProblem, smilesProblem, ticTacToeProblem -}; \ No newline at end of file +}; From 51e64f2c08a595a85a4f03d5cd6757a5ccad1446 Mon Sep 17 00:00:00 2001 From: grishbar <32193933+grishbar@users.noreply.github.com> Date: Sat, 23 Mar 2019 23:27:12 +0500 Subject: [PATCH 5/6] add some TypeError, RangeError checks for phoneProblem, numberSystemProblem, fibonacciProblem, abProblem --- warmup.js | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/warmup.js b/warmup.js index 258cecb8c..b7d6a9af7 100644 --- a/warmup.js +++ b/warmup.js @@ -8,7 +8,8 @@ * @returns {Number} Сумма аргументов */ function abProblem(a, b) { - if (!isNaN(parseFloat(a)) && isFinite(a) && !isNaN(parseFloat(b)) && isFinite(b)) { + if (!isNaN(parseFloat(a)) && isFinite(a) && !isNaN(parseFloat(b)) && isFinite(b) && + typeof(a) === 'number' && typeof(b) === 'number') { return a + b; } throw new TypeError(); @@ -45,26 +46,15 @@ function colorsProblem(hexColor) { if (typeof hexColor !== 'string') { throw new TypeError(); } - // let hexColorfield = hexColor.split(); - if (hexColor.length !== 7) { + if (hexColor.length !== 7 || hexColor[0] !== '#') { throw new RangeError(); } - - /** - *for (i = 1; i < hexColorfield.length; i++) { - * - * if (hexColor[i] < 'F' || hexColor[i] < 9) { - * throw new RangeError(); - * } - *} - */ let bigint = parseInt(hexColor.split('#')[1], 16); let r = (bigint > 16) && 255; let g = (bigint > 8) && 255; let b = bigint && 255; return '(' + r + ', ' + g + ', ' + b + ')'; - // Ваше решение } /** @@ -77,9 +67,12 @@ function colorsProblem(hexColor) { function fibonacciProblem(n) { let a = 0; let b = 1; - if (Number.isNaN(n)) { + if (!(!isNaN(parseFloat(n)) && isFinite(n))) { throw new TypeError(); } + if (n < 0) { + throw new RangeError(); + } if (n >= 2) { for (let i = 1; i < Math.trunc(n / 2) + 1; i++) { a = a + b; @@ -127,7 +120,7 @@ function matrixProblem(matrix) { */ function numberSystemProblem(n, targetNs) { if (!(!isNaN(parseFloat(n)) && isFinite(n) && !isNaN(parseFloat(targetNs)) && - isFinite(targetNs))) { + isFinite(targetNs)) && typeof(n) !== 'number' && typeof(targetNs) !== 'number') { throw new TypeError(); } if (targetNs < 2 || targetNs > 36) { @@ -153,7 +146,9 @@ function numberSystemProblem(n, targetNs) { function phoneProblem(phoneNumber) { if (phoneNumber.length === 15 && phoneNumber.indexOf('8-800-') === 0 && phoneNumber[9] === '-' && phoneNumber[12] === '-' && - !isNaN(parseFloat(phoneNumber.substr(6, 3)))) { + !isNaN(parseFloat(phoneNumber.substr(6, 3))) && + !isNaN(parseFloat(phoneNumber.substr(10, 2))) && + !isNaN(parseFloat(phoneNumber.substr(13, 2)))) { return true; } From 1d5d18b34fccb788cec0a0c7491bf1e616b0b691 Mon Sep 17 00:00:00 2001 From: grishbar <32193933+grishbar@users.noreply.github.com> Date: Sun, 24 Mar 2019 00:40:23 +0500 Subject: [PATCH 6/6] change smilesProblem alghoritm --- warmup.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/warmup.js b/warmup.js index b7d6a9af7..e5d8bc70a 100644 --- a/warmup.js +++ b/warmup.js @@ -166,8 +166,10 @@ function smilesProblem(text) { throw new TypeError(); } let k = 0; + let temp = ''; for (let i = 0; i < text.length; i++) { - if (text[i] === ')') { + temp = text.substr(i, 3); + if (temp === ':-)' || temp === '(-:') { k++; } }