Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Соложонкин Владислав #129

Open
wants to merge 34 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
8504e3b
Finish do abProblem, finish do centuryByYearProblem, start do colorsP…
SVladislavD Oct 16, 2018
db0f322
I don't now what i did
SVladislavD Oct 16, 2018
5fc04b7
Вынес кодировку Hex в отдельный файл. Там реализовал финкции проверки
SVladislavD Oct 16, 2018
5b627c8
Переделал функцию colorsProblem с помощью констант и функций из файла
SVladislavD Oct 16, 2018
aced57f
Закончил писать fibanacciProblem, matrixProblem, numberSystemProblem
SVladislavD Oct 18, 2018
47f7ea3
Добавил ToLocaleLowerCase в colorsProblem, сделал PhoneProblem с испо…
SVladislavD Oct 18, 2018
2a779d0
Закончил писать smilesProblem и ticTacToeProblem
SVladislavD Oct 19, 2018
ac50329
Убрал повторное объявление BASE_HEX в colorsProblem
SVladislavD Oct 19, 2018
e0e6d8c
Убрал повторное объявление iterationQuantity
SVladislavD Oct 19, 2018
26e8d0c
Исправил CodeStayle
SVladislavD Oct 19, 2018
a786f78
CodeStyle снова
SVladislavD Oct 19, 2018
9943cf9
CodeStyle 1.3
SVladislavD Oct 19, 2018
7a1d8ec
переименовал функции (CodeStyle)
SVladislavD Oct 19, 2018
970e83a
Переименовал названия функций в ColorsProblem (CodeStyle)
SVladislavD Oct 19, 2018
6febbb2
CodeStyle 1.4
SVladislavD Oct 19, 2018
7dff91a
CodeStyle 1.5
SVladislavD Oct 19, 2018
c3cc110
CodeStyle 1.6
SVladislavD Oct 19, 2018
0573469
CodeStyle 1.7
SVladislavD Oct 19, 2018
4b15e44
CodeStyle 1.8
SVladislavD Oct 19, 2018
a8f33c0
CodeStyle 1.8
SVladislavD Oct 19, 2018
99851b7
CodeStyle 1.9
SVladislavD Oct 19, 2018
4cc2dd1
Поставил костыль на While(true) {}, иначе не пускает
SVladislavD Oct 19, 2018
dcbb9e1
CodeStyle 1.10
SVladislavD Oct 19, 2018
60abd43
Переделал SmilesProblem, numberSystemProblem
SVladislavD Oct 19, 2018
49f0802
Забыл влять скачанные изменения в локальный репозиторий. Поздно. Дела…
SVladislavD Oct 19, 2018
32d18c5
CodeStyle 1.11
SVladislavD Oct 19, 2018
2fed094
Поставил строку в конце файла в Hex.js
SVladislavD Oct 19, 2018
faedfa8
изменил условие на принадлежность [2, 36] в numberSystemProblem
SVladislavD Oct 19, 2018
900e6fc
изменил количество отступов в 231 строке на 12. Было 15. Изменил Colo…
SVladislavD Oct 19, 2018
0d5978b
В colorsProblem поменял способ вывода
SVladislavD Oct 19, 2018
e15c4b6
Забыл использовать getNumberBySymbal
SVladislavD Oct 19, 2018
f377353
Переименовал getNumberBySymbal в getNumber
SVladislavD Oct 19, 2018
88770d1
Тоже, что и в предыдущем коммите
SVladislavD Oct 19, 2018
ff2df31
CodeStyle 1.12
SVladislavD Oct 19, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions Hex.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
'use strict';

const HEX_SYMBOLS =
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
const HEX_BASE = 16;

/**
* Определяет является ли символ шеснадцатиричным
* @param {String} symbol Шестнадцатиричный символ, в виде строки длины 1
* @returns {Boolean} Когда символ шестнадцатиричный, то true, а иначе false
*/
function isHexadimal(symbol) {
return HEX_SYMBOLS.includes(symbol);
}

/**
* Переводит Шестнадцатиричный символ в десятичное число
* @param {String} symbol Шестнадцатиричный символ, в виде строки длины 1
* @returns {Number} Десятичнеое число, переведённое из шестнадчатиричного символа
*/
function getNumber(symbol) {
return HEX_SYMBOLS.indexOf(symbol);
}

module.exports = {
HEX_BASE,
isHexadimal,
getNumber
};
165 changes: 156 additions & 9 deletions warmup.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
'use strict';

/**
* Проверяет является ли аргумент числом
* @param {Number} something Нет требований к аргументу
* @returns {Boolean} Если является числом, то true, а иначе false
*/
function isNumber(something) {
return typeof something === 'number';
}

/**
* Складывает два целых числа
* @param {Number} a Первое целое
Expand All @@ -8,7 +17,14 @@
* @returns {Number} Сумма аргументов
*/
function abProblem(a, b) {
// Ваше решение
if (!isNumber(a)) {
throw new TypeError('First argument is not a number');
}
if (!isNumber(b)) {
throw new TypeError('Second argument is not a number');
}

return a + b;
}

/**
Expand All @@ -19,7 +35,26 @@ function abProblem(a, b) {
* @returns {Number} Век, полученный из года
*/
function centuryByYearProblem(year) {
// Ваше решение
if (!isNumber(year)) {
throw new TypeError('Argument is not a number');
}
if (year < 0) {
throw new RangeError('Argument is negative');
}
const YEARS_IN_CENTURY = 100;

return Math
.floor(year / YEARS_IN_CENTURY) + // получили индекс года
1; // получили номер года
}

/**
* определяет является ли аргумент строкой
* @param {String} something Нет требований к аргументу
* @returns {Boolean} Если является строкой, то true, а иначе false
*/
function isString(something) {
return typeof something === 'string';
}

/**
Expand All @@ -30,7 +65,30 @@ function centuryByYearProblem(year) {
* @returns {String} Цвет в формате RGB, например, '(255, 255, 255)'
*/
function colorsProblem(hexColor) {
// Ваше решение
const lowerHexColor = hexColor.toLocaleLowerCase();
if (!isString(lowerHexColor)) {
throw new TypeError('Color in Format HEX don\'t gives as a string');
}
const COLOR_RANGE_ERROR = new RangeError('Value of color is incorrect');
if (lowerHexColor.length !== 7 || lowerHexColor[0] !== '#') {
throw COLOR_RANGE_ERROR;
}
const {
BASE_HEX,
isHexadimal,
getNumber
} = require('./Hex');
for (let i = 1; i < lowerHexColor.length; i++) {
if (!isHexadimal(lowerHexColor[i])) {
throw COLOR_RANGE_ERROR;
}
}
lowerHexColor = lowerHexColor.split('#').shift();
const number1 = getNumber(lowerHexColor[0]) * BASE_HEX + getNumber(lowerHexColor[1]);
const number2 = getNumber(lowerHexColor[2]) * BASE_HEX + getNumber(lowerHexColor[3]);
const number3 = getNumber(lowerHexColor[4]) * BASE_HEX + getNumber(lowerHexColor[5]);

return '(' + number1 + ',' + number2 + ',' + number3 + ')';
}

/**
Expand All @@ -41,7 +99,26 @@ function colorsProblem(hexColor) {
* @returns {Number} Число Фибоначчи, находящееся на n-ой позиции
*/
function fibonacciProblem(n) {
// Ваше решение
if (!isNumber(n) !== 'number') {
throw new TypeError('Position in row give\'s not as a number');
}
if (n < 0) {
throw new RangeError('Position in row not positve integer');
}
if (n === 0 || n === 1) {
return n;
}
let q = 0;
let qPlus1 = 1;
let i = 2;
while (i < n) {
const next = q + qPlus1;
q = qPlus1;
qPlus1 = next;
i++;
}

return q + qPlus1;
}

/**
Expand All @@ -51,7 +128,25 @@ function fibonacciProblem(n) {
* @returns {(Any[])[]} Транспонированная матрица размера NxM
*/
function matrixProblem(matrix) {
// Ваше решение
const ARRAY_2D_RANGE_ERROR = new TypeError('transfered not an 2D array');
if (!Array.isArray(matrix)) {
throw ARRAY_2D_RANGE_ERROR;
}
for (let i = 0; i < matrix.length; i++) {
if (!Array.isArray(matrix[i])) {
throw ARRAY_2D_RANGE_ERROR;
}
}
const newMatrix = [];
const m = matrix[0].length;
const n = matrix.length;
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
newMatrix[i][j] = matrix[j][i];
}
}

return newMatrix;
}

/**
Expand All @@ -63,7 +158,19 @@ function matrixProblem(matrix) {
* @returns {String} Число n в системе счисления targetNs
*/
function numberSystemProblem(n, targetNs) {
// Ваше решение
if (!isNumber(n)) {
throw new TypeError('Transfered not a decimal number');
}
if (!isNumber(targetNs)) {
throw new TypeError('Base of number system isn\'t a number');
}
const maxNumberSystem = 36;
const minNumberSystem = 2;
if ((targetNs - minNumberSystem) * (maxNumberSystem - targetNs) < 0) {
throw new RangeError('Base of number system not belong [2, 36]');
}

return n.toString(targetNs);
}

/**
Expand All @@ -72,7 +179,11 @@ function numberSystemProblem(n, targetNs) {
* @returns {Boolean} Если соответствует формату, то true, а иначе false
*/
function phoneProblem(phoneNumber) {
// Ваше решение
if (phoneNumber.length !== 15) {
return false;
}

return /8-800-\d{3}-\d{2}-\d{2}/.test(phoneNumber);
}

/**
Expand All @@ -82,7 +193,16 @@ function phoneProblem(phoneNumber) {
* @returns {Number} Количество улыбающихся смайликов в строке
*/
function smilesProblem(text) {
// Ваше решение
if (!isString(text)) {
throw new TypeError('Text didn\'t transfer like a string');
}
const smilesArray = [':-)', '(-:'];
let amount = 0;
smilesArray.forEach(function (smile) {
amount += text.split(smile).length - 1;
});

return amount;
}

/**
Expand All @@ -92,7 +212,34 @@ function smilesProblem(text) {
* @returns {'x' | 'o' | 'draw'} Результат игры
*/
function ticTacToeProblem(field) {
// Ваше решение
let x0 = 1;
let y0 = 1;
let delta = Math.PI / 4;
const iterationQuantity = Math.round(2 * Math.PI / delta);
for (let i = 0; i < iterationQuantity; i++) {
const dX = Math.round(Math.cos(i * delta));
const dY = Math.round(Math.sin(i * delta));
if (field[x0][y0] === field[x0 + dX][y0 + dY] &&
field[x0][y0] === field[x0 - dX][x0 - dY]) {
return field[x0][y0];
}
}
x0 = 0;
y0 = 0;
delta = Math.PI / 2;
iterationQuantity = Math.round(2 * Math.PI / delta);
for (let i = 0; i < iterationQuantity; i++) {
const dX = Math.round(Math.cos(-i * delta));
const dY = Math.round(Math.sin(-i * delta));
if (field[x0][y0] === field[x0 + dX][y0 + dY] &&
field[x0][y0] === field[x0 + 2 * dX][y0 + 2 * dY]) {
return field[x0][y0];
}
x0 += 2 * dX;
y0 += 2 * dY;
}

return 'draw';
}

module.exports = {
Expand Down