From 2c7c484ff40effe49fcc8458bb7d2ffc2b276785 Mon Sep 17 00:00:00 2001 From: Mikhail <43609953+firepanda70@users.noreply.github.com> Date: Thu, 18 Oct 2018 00:14:00 +0500 Subject: [PATCH] Something that didnt work --- warmup.js | 236 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 227 insertions(+), 9 deletions(-) diff --git a/warmup.js b/warmup.js index eefda9891..906fb5d61 100644 --- a/warmup.js +++ b/warmup.js @@ -9,6 +9,10 @@ */ function abProblem(a, b) { // Ваше решение + if (typeof a !== 'number' || typeof b !== 'number') { + throw (TypeError); + } + return a+b; } /** @@ -19,7 +23,13 @@ function abProblem(a, b) { * @returns {Number} Век, полученный из года */ function centuryByYearProblem(year) { - // Ваше решение + if (typeof year !== 'number'){ + throw(TypeError); + } + else if(year < 0){ + throw(RangeError); + } + return Math.trunc(year / 100) + 1; } /** @@ -29,10 +39,28 @@ function centuryByYearProblem(year) { * @throws {RangeError} Когда значения цвета выходят за пределы допустимых * @returns {String} Цвет в формате RGB, например, '(255, 255, 255)' */ -function colorsProblem(hexColor) { - // Ваше решение +function colorsProblem(hexColor) { + if (typeof hexColor !== 'string'){ + throw (TypeError); + } + if (hexColor.length !==7 || hexColor[0] !== '#'){ + throw (RangeError); + } + var array = {'0': 0 , '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, + '8': 8, '9': 9, 'A': 10, 'B': 11, 'C': 12, 'D': 13, 'E': 14, 'F': 15} + let result = []; + let j =0; + for(var i = 1; i < 7; i+=2){ + if(array[hexColor[i]] === undefined || array[hexColor[i+1]] === undefined){ + throw(RangeError); + } + result[j] = array[hexColor[i]]*16 + array[hexColor[i+1]]; + j++; + } + return '(' + result[0] + ', ' + result[1] + ', ' + result[2] + ')'; } + /** * Находит n-ое число Фибоначчи * @param {Number} n Положение числа в ряде Фибоначчи @@ -41,7 +69,27 @@ function colorsProblem(hexColor) { * @returns {Number} Число Фибоначчи, находящееся на n-ой позиции */ function fibonacciProblem(n) { - // Ваше решение + if(typeof n !== 'number'){ + throw (TypeError); + } + if( !Number.isInteger(n) || n < 0) + { + throw (RangeError); + } + let fibbonachi = [0, 0, 1]; + if(fibbonachi[n-1] != undefined) + { + return fibbonachi[n]; + } + let i = 2; + while(i < n - 1){ + fibbonachi[3]=fibbonachi[1]+fibbonachi[2]; + fibbonachi.shift(); + //Решил сэкономить место + i++; + } + return fibbonachi[3]; + } /** @@ -51,7 +99,25 @@ function fibonacciProblem(n) { * @returns {(Any[])[]} Транспонированная матрица размера NxM */ function matrixProblem(matrix) { - // Ваше решение + if(!Array.isArray(matrix)){ + throw(TypeError); + } + + var newArray = []; + for(let i = 0; i < matrix[0].length; i++){ + if(!Array.isArray(matrix[i])) + { + throw (TypeError); + } + + newArray[i] = []; + + for(let j = 0; j < matrix.length; j++){ + newArray[j][i] = matrix[i][j]; + } + return newArray; + } + } /** @@ -63,7 +129,29 @@ function matrixProblem(matrix) { * @returns {String} Число n в системе счисления targetNs */ function numberSystemProblem(n, targetNs) { - // Ваше решение + if (typeof n !== 'number' || typeof targetNs !== 'number') + { + throw (TypeError); + } + if (targetNs < 2 || targetNs > 36){ + throw(RangeError); + } + var array = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] + let divisionRemain = 0; + let result = ''; + while(n > targetNs) + { + divisionRemain = n / targetNs; + if(x/y>=0) + n = Math.floor(n/targetNs); + else + n = Math.ceil(n/targetNs); + //может отрицательные будут, можно оптимизироовать + result += array[divisionRemain]; + } + result += array[n]; + return result.split("").reverse().join(""); } /** @@ -72,7 +160,20 @@ function numberSystemProblem(n, targetNs) { * @returns {Boolean} Если соответствует формату, то true, а иначе false */ function phoneProblem(phoneNumber) { - // Ваше решение + phoneNumber.split("-"); + if(phoneNumber.length!==5) + return false; + if(Number.parseInt(phoneNumber[0])!==8) + return false; + if(Number.parseInt(phoneNumber[1])!==800) + return false; + if(isNaN(phoneNumber[2])) + return false; + if(isNaN(phoneNumber[3])) + return false; + if(isNaN(phoneNumber[4])) + return false; + return true; } /** @@ -82,7 +183,105 @@ function phoneProblem(phoneNumber) { * @returns {Number} Количество улыбающихся смайликов в строке */ function smilesProblem(text) { - // Ваше решение + if(typeof text !== "string") + { + throw(TypeError); + } + let curretSymbol = 0; + let smileCount = 0; + // Далее переход по функциям будет эквивалентен переходам по остояниям автомата: + // | : | - | ) | ( | + // 1| 2 | 1 | 1 | 5 | + // 2| 2 | 3 | 1 | 5 | + // 3| 2 | 1 | 4 | 5 | + // 4| тут эпсилон переходы в 1 состояние и +1 смайлам + // 5| 2 | 6 | 1 | 5 | + // 6| 2 | 1 | 4 | 5 | + // может быть потом сделаю проще + first(); + function first(){ + while(curretSymbol