diff --git a/warmup.js b/warmup.js index eefda9891..b2e3ca914 100644 --- a/warmup.js +++ b/warmup.js @@ -8,7 +8,12 @@ * @returns {Number} Сумма аргументов */ function abProblem(a, b) { - // Ваше решение + if (typeof(a) !== 'number' || typeof(b) !== 'number' || + !Number.isInteger(a) || !Number.isInteger(b)) { + throw new TypeError(); + } + + return a + b; } /** @@ -19,7 +24,15 @@ function abProblem(a, b) { * @returns {Number} Век, полученный из года */ function centuryByYearProblem(year) { - // Ваше решение + if (typeof(year) !== 'number' || + !Number.isInteger(year)) { + throw new TypeError(); + } + if (year < 0) { + throw new RangeError(); + } + + return Math.trunc(year / 100) + 1; } /** @@ -29,8 +42,22 @@ function centuryByYearProblem(year) { * @throws {RangeError} Когда значения цвета выходят за пределы допустимых * @returns {String} Цвет в формате RGB, например, '(255, 255, 255)' */ + + function colorsProblem(hexColor) { - // Ваше решение + if (typeof(hexColor) !== 'string') { + throw new TypeError(); + } + var first = parseInt(hexColor[1] + hexColor[2], 16); + var second = parseInt(hexColor[3] + hexColor[4], 16); + var third = parseInt(hexColor[5] + hexColor[6], 16); + if (first > 255 || second > 255 || third > 255) { + throw new RangeError(); + } + + return '(' + first.toString() + + ', ' + second.toString() + + ', ' + third.toString() + ')'; } /** @@ -41,7 +68,18 @@ function colorsProblem(hexColor) { * @returns {Number} Число Фибоначчи, находящееся на n-ой позиции */ function fibonacciProblem(n) { - // Ваше решение + if (typeof(n) !== 'number') { + throw new TypeError(); + } + if (n <= 0 || !Number.isInteger(n)) { + throw new RangeError(); + } + var a = [1, 1]; + for (var i = 2; i < n; i++) { + a.push(a[i - 1] + a[i - 2]); + } + + return a[n - 1]; } /** @@ -51,7 +89,26 @@ function fibonacciProblem(n) { * @returns {(Any[])[]} Транспонированная матрица размера NxM */ function matrixProblem(matrix) { - // Ваше решение + if (!Array.isArray(matrix)) { + throw new TypeError(); + } + var i; + var j; + var ans = []; + for (i = 0; i < matrix.length; i++) { + if (!Array.isArray(matrix[i])) { + throw new TypeError(); + } + ans.push([]); + } + + for (i = 0; i < matrix.length; i++) { + for (j = 0; j < matrix[i].length; j++) { + ans[j][i] = matrix[i][j]; + } + } + + return ans; } /** @@ -63,7 +120,16 @@ function matrixProblem(matrix) { * @returns {String} Число n в системе счисления targetNs */ function numberSystemProblem(n, targetNs) { - // Ваше решение + if (typeof(n) !== 'number' || + typeof(targetNs) !== 'number' || + !Number.isInteger(targetNs)) { + throw new TypeError(); + } + if (targetNs < 2 || targetNs > 36) { + throw new RangeError(); + } + + return n.toString(targetNs).toLowerCase(); } /** @@ -72,7 +138,11 @@ function numberSystemProblem(n, targetNs) { * @returns {Boolean} Если соответствует формату, то true, а иначе false */ function phoneProblem(phoneNumber) { - // Ваше решение + if (typeof(phoneNumber) !== 'string') { + throw new TypeError(); + } + + return phoneNumber.search('^8-800-\\d\\d\\d-\\d\\d-\\d\\d$') !== -1; } /** @@ -82,7 +152,23 @@ function phoneProblem(phoneNumber) { * @returns {Number} Количество улыбающихся смайликов в строке */ function smilesProblem(text) { - // Ваше решение + if (typeof(text) !== 'string') { + throw new TypeError(); + } + var ans = 0; + var rSmile = '(-:'; + var lSmile = ':-)'; + for (var i = 0; i < text.length - 2; i++) { + var tmp = ''; + for (var j = 0; j < 3; j++) { + tmp += text[i + j]; + } + if (tmp === rSmile || tmp === lSmile) { + ans++; + } + } + + return ans; } /** @@ -91,8 +177,33 @@ function smilesProblem(text) { * @param {(('x' | 'o')[])[]} field Игровое поле 3x3 завершённой игры * @returns {'x' | 'o' | 'draw'} Результат игры */ + function ticTacToeProblem(field) { - // Ваше решение + var i; + for (i = 0; i < 3; i++) { + if (field[i][0] === field[i][1] && + field[i][0] === field[i][2]) { + + return field[i][0]; + } + if (field[0][i] === field[1][i] && + field[0][i] === field[2][i]) { + + return field[0][i]; + } + } + if (field[0][2] === field[1][1] && + field[1][1] === field[2][0]) { + + return field[0][2]; + } + if (field[0][0] === field[1][1] && + field[1][1] === field[2][2]) { + + return field[0][0]; + } + + return 'draw'; } module.exports = {