From 1053e05bbba224d8fe87702f0dd0c999bfe7e03a Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 9 Oct 2016 18:51:22 +0500 Subject: [PATCH 01/13] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/roman-time.js b/roman-time.js index f66353e..0560555 100644 --- a/roman-time.js +++ b/roman-time.js @@ -4,9 +4,73 @@ * @param {String} time – время в формате HH:MM (например, 09:05) * @returns {String} – время римскими цифрами (IX:V) */ + + + function romanTime(time) { - // Немного авторского кода и замечательной магии + var hour = null; + var minute = null; + var arrayOfTime = time.split(':'); + if (parseInt(arrayOfTime[0],10) == 0) { + hour = 'N'; + } else if(isNaN(parseInt(arrayOfTime[0], 10)) || parseInt(arrayOfTime[0]) > 23 || parseInt(arrayOfTime[0]) < 0 ) { + throw new TypeError('Неверное время'); + } else if(!isNaN(parseInt(arrayOfTime[0], 10))) { + hour = parseNumber(parseInt(arrayOfTime[0], 10)); + } + if (parseInt(arrayOfTime[1],10) == 0) { + minute = 'N'; + } else if(isNaN(parseInt(arrayOfTime[1], 10)) || parseInt(arrayOfTime[1]) > 59 || parseInt(arrayOfTime[1]) < 0 ) { + throw new TypeError('Неверное время'); + } else { + minute = parseNumber(parseInt(arrayOfTime[1], 10)); + } + time = hour + ':' + minute; + return time; } +function parseNumber(num) { + var roman = ''; + var arrayOfSymbol = []; + arrayOfSymbol[0] = (num - num % 50) / 50; + num %= 50; + arrayOfSymbol[1] = (num - num % 10) / 10; + num %= 10; + arrayOfSymbol[2] = (num - num % 5) / 5; + arrayOfSymbol[3] = num % 5; + if (arrayOfSymbol[0] == 1) { + roman += 'L'; + } + if (arrayOfSymbol[1] !== 0 && arrayOfSymbol[1] !== 4) { + for (var i = arrayOfSymbol[1]; i !== 0; i--) { + roman += 'X'; + } + } + if ( arrayOfSymbol[1] === 4) { + roman = roman.substring(0, roman.length - 1); + roman += 'XL'; + } + if (arrayOfSymbol[2] !== 0) { + for (var i = arrayOfSymbol[2]; i !== 0; i--) { + roman += 'V'; + } + } + if (arrayOfSymbol[3] !== 0 && arrayOfSymbol[3] !== 4) { + for (var i = arrayOfSymbol[3]; i !== 0; i--) { + roman += 'I'; + } + } + if ( arrayOfSymbol[3] === 4 ) { + if (roman[roman.length-1] == 'V') { + roman = roman.substring(0, roman.length - 1); + roman += 'IX'; + } else { + roman += 'IV'; + } + } + + return roman; +} + module.exports = romanTime; From 7a14943f60d7611b3a72f9f37c557298fdb76cf5 Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 9 Oct 2016 19:05:20 +0500 Subject: [PATCH 02/13] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BB=D0=B8=D0=BD=D1=82=D0=B8=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/roman-time.js b/roman-time.js index 0560555..ffa7dc5 100644 --- a/roman-time.js +++ b/roman-time.js @@ -5,22 +5,20 @@ * @returns {String} – время римскими цифрами (IX:V) */ - - function romanTime(time) { var hour = null; var minute = null; var arrayOfTime = time.split(':'); - if (parseInt(arrayOfTime[0],10) == 0) { + if (parseInt(arrayOfTime[0], 10) === 0) { hour = 'N'; - } else if(isNaN(parseInt(arrayOfTime[0], 10)) || parseInt(arrayOfTime[0]) > 23 || parseInt(arrayOfTime[0]) < 0 ) { + } else if (isNaN(parseInt(arrayOfTime[0], 10)) || parseInt(arrayOfTime[0]) > 23 || parseInt(arrayOfTime[0]) < 0) { throw new TypeError('Неверное время'); - } else if(!isNaN(parseInt(arrayOfTime[0], 10))) { - hour = parseNumber(parseInt(arrayOfTime[0], 10)); + } else if (!isNaN(parseInt(arrayOfTime[0], 10))) { + hour = parseNumber(parseInt(arrayOfTime[0], 10)); } - if (parseInt(arrayOfTime[1],10) == 0) { + if (parseInt(arrayOfTime[1],10) === 0) { minute = 'N'; - } else if(isNaN(parseInt(arrayOfTime[1], 10)) || parseInt(arrayOfTime[1]) > 59 || parseInt(arrayOfTime[1]) < 0 ) { + } else if (isNaN(parseInt(arrayOfTime[1], 10)) || parseInt(arrayOfTime[1]) > 59 || parseInt(arrayOfTime[1]) < 0) { throw new TypeError('Неверное время'); } else { minute = parseNumber(parseInt(arrayOfTime[1], 10)); @@ -39,30 +37,31 @@ function parseNumber(num) { num %= 10; arrayOfSymbol[2] = (num - num % 5) / 5; arrayOfSymbol[3] = num % 5; - if (arrayOfSymbol[0] == 1) { + if (arrayOfSymbol[0] === 1) { roman += 'L'; } - if (arrayOfSymbol[1] !== 0 && arrayOfSymbol[1] !== 4) { - for (var i = arrayOfSymbol[1]; i !== 0; i--) { + var i = null; + if (arrayOfSymbol[1] !== 0 && arrayOfSymbol[1] !== 4) { + for (i = arrayOfSymbol[1]; i !== 0; i--) { roman += 'X'; } } - if ( arrayOfSymbol[1] === 4) { + if (arrayOfSymbol[1] === 4) { roman = roman.substring(0, roman.length - 1); roman += 'XL'; } if (arrayOfSymbol[2] !== 0) { - for (var i = arrayOfSymbol[2]; i !== 0; i--) { + for (i = arrayOfSymbol[2]; i !== 0; i--) { roman += 'V'; } } if (arrayOfSymbol[3] !== 0 && arrayOfSymbol[3] !== 4) { - for (var i = arrayOfSymbol[3]; i !== 0; i--) { + for (i = arrayOfSymbol[3]; i !== 0; i--) { roman += 'I'; } } - if ( arrayOfSymbol[3] === 4 ) { - if (roman[roman.length-1] == 'V') { + if (arrayOfSymbol[3] === 4) { + if (roman[roman.length - 1] === 'V') { roman = roman.substring(0, roman.length - 1); roman += 'IX'; } else { From 7aa20ee6c0685dfc7c39075afd880adf41f4fd4d Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 9 Oct 2016 19:39:46 +0500 Subject: [PATCH 03/13] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=84-=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2?= =?UTF-8?q?=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 53 +++++++++++++++------------------------------------ 1 file changed, 15 insertions(+), 38 deletions(-) diff --git a/roman-time.js b/roman-time.js index ffa7dc5..5ee2f76 100644 --- a/roman-time.js +++ b/roman-time.js @@ -9,16 +9,18 @@ function romanTime(time) { var hour = null; var minute = null; var arrayOfTime = time.split(':'); + var hourArabic = parseInt(arrayOfTime[0], 10); + var minuteArabic = parseInt(arrayOfTime[1], 10); if (parseInt(arrayOfTime[0], 10) === 0) { hour = 'N'; - } else if (isNaN(parseInt(arrayOfTime[0], 10)) || parseInt(arrayOfTime[0]) > 23 || parseInt(arrayOfTime[0]) < 0) { + } else if (isNaN(hourArabic) || hourArabic > 23 || hourArabic < 0) { throw new TypeError('Неверное время'); } else if (!isNaN(parseInt(arrayOfTime[0], 10))) { hour = parseNumber(parseInt(arrayOfTime[0], 10)); } - if (parseInt(arrayOfTime[1],10) === 0) { + if (parseInt(arrayOfTime[1], 10) === 0) { minute = 'N'; - } else if (isNaN(parseInt(arrayOfTime[1], 10)) || parseInt(arrayOfTime[1]) > 59 || parseInt(arrayOfTime[1]) < 0) { + } else if (isNaN(minuteArabic) || minuteArabic > 59 || minuteArabic < 0) { throw new TypeError('Неверное время'); } else { minute = parseNumber(parseInt(arrayOfTime[1], 10)); @@ -29,43 +31,18 @@ function romanTime(time) { } function parseNumber(num) { + var arabic = [1, 4, 5, 9, 10, 40, 50]; + var romanic = ['I','IV','V','IX','X','XL','L']; var roman = ''; - var arrayOfSymbol = []; - arrayOfSymbol[0] = (num - num % 50) / 50; - num %= 50; - arrayOfSymbol[1] = (num - num % 10) / 10; - num %= 10; - arrayOfSymbol[2] = (num - num % 5) / 5; - arrayOfSymbol[3] = num % 5; - if (arrayOfSymbol[0] === 1) { - roman += 'L'; - } - var i = null; - if (arrayOfSymbol[1] !== 0 && arrayOfSymbol[1] !== 4) { - for (i = arrayOfSymbol[1]; i !== 0; i--) { - roman += 'X'; - } - } - if (arrayOfSymbol[1] === 4) { - roman = roman.substring(0, roman.length - 1); - roman += 'XL'; - } - if (arrayOfSymbol[2] !== 0) { - for (i = arrayOfSymbol[2]; i !== 0; i--) { - roman += 'V'; - } - } - if (arrayOfSymbol[3] !== 0 && arrayOfSymbol[3] !== 4) { - for (i = arrayOfSymbol[3]; i !== 0; i--) { - roman += 'I'; - } - } - if (arrayOfSymbol[3] === 4) { - if (roman[roman.length - 1] === 'V') { - roman = roman.substring(0, roman.length - 1); - roman += 'IX'; + var index = arabic.length - 1; + while(num > 0) + { + if(num >= arabic[index]) + { + roman += romanic[index]; + num -= arabic[index]; } else { - roman += 'IV'; + index--; } } From 553ac10a8b93a2621de096e2a874fa24eb4bb4ff Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 9 Oct 2016 20:01:44 +0500 Subject: [PATCH 04/13] =?UTF-8?q?=D0=BE=D0=BF=D1=82=D0=B8=D0=BC=D0=B8?= =?UTF-8?q?=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=B3=D0=BB?= =?UTF-8?q?=D0=B0=D0=B2=D0=BD=D0=B0=D1=8F=20=D1=84-=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/roman-time.js b/roman-time.js index 5ee2f76..6aac846 100644 --- a/roman-time.js +++ b/roman-time.js @@ -9,21 +9,20 @@ function romanTime(time) { var hour = null; var minute = null; var arrayOfTime = time.split(':'); - var hourArabic = parseInt(arrayOfTime[0], 10); - var minuteArabic = parseInt(arrayOfTime[1], 10); - if (parseInt(arrayOfTime[0], 10) === 0) { - hour = 'N'; - } else if (isNaN(hourArabic) || hourArabic > 23 || hourArabic < 0) { + var hourArab = parseInt(arrayOfTime[0], 10); + var minArab = parseInt(arrayOfTime[1], 10); + if (isNaN(hourArab) || hourArab > 23 || hourArab < 0 || isNaN(minArab) || minArab > 59 || minArab < 0) { throw new TypeError('Неверное время'); - } else if (!isNaN(parseInt(arrayOfTime[0], 10))) { - hour = parseNumber(parseInt(arrayOfTime[0], 10)); } - if (parseInt(arrayOfTime[1], 10) === 0) { + if (hourArab === 0) { + hour = 'N'; + } else { + hour = parseNumber(hourArab); + } + if (minArab === 0) { minute = 'N'; - } else if (isNaN(minuteArabic) || minuteArabic > 59 || minuteArabic < 0) { - throw new TypeError('Неверное время'); } else { - minute = parseNumber(parseInt(arrayOfTime[1], 10)); + minute = parseNumber(minArab); } time = hour + ':' + minute; @@ -32,15 +31,13 @@ function romanTime(time) { function parseNumber(num) { var arabic = [1, 4, 5, 9, 10, 40, 50]; - var romanic = ['I','IV','V','IX','X','XL','L']; + var romanic = ['I', 'IV', 'V', 'IX', 'X', 'XL', 'L']; var roman = ''; - var index = arabic.length - 1; - while(num > 0) - { - if(num >= arabic[index]) - { - roman += romanic[index]; + var index = arabic.length -1; + while (num !== 0) { + if (num >= arabic[index]) { num -= arabic[index]; + roman += romanic[index]; } else { index--; } From 6685fb45651940cbd29fae70a858cb1a3c4f5e56 Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 9 Oct 2016 20:19:15 +0500 Subject: [PATCH 05/13] =?UTF-8?q?=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=B2=D1=81=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/roman-time.js b/roman-time.js index 6aac846..396142a 100644 --- a/roman-time.js +++ b/roman-time.js @@ -6,34 +6,63 @@ */ function romanTime(time) { - var hour = null; - var minute = null; + var arrayOfTime = time.split(':'); var hourArab = parseInt(arrayOfTime[0], 10); var minArab = parseInt(arrayOfTime[1], 10); - if (isNaN(hourArab) || hourArab > 23 || hourArab < 0 || isNaN(minArab) || minArab > 59 || minArab < 0) { + if (checkHour(hourArab) + checkMinute(minArab) > 0) { throw new TypeError('Неверное время'); } + var hourRoman = hourChange(hourArab); + var minRoman = minChange(minArab); + time = hourRoman + ':' + minRoman; + + return time; +} + +function checkHour(hourArab) { + if (isNaN(hourArab) || hourArab > 23 || hourArab < 0) { + return 1; + } + + return 0; +} + +function checkMinute(minArab) { + if (isNaN(minArab) || minArab > 59 || minArab < 0) { + return 1; + } + + return 0; +} + +function hourChange(hourArab) { + var hour = null; if (hourArab === 0) { hour = 'N'; } else { hour = parseNumber(hourArab); } + + return hour; +} + +function minChange(minArab) { + var minute = null; if (minArab === 0) { minute = 'N'; } else { minute = parseNumber(minArab); } - time = hour + ':' + minute; - return time; + return minute; } function parseNumber(num) { var arabic = [1, 4, 5, 9, 10, 40, 50]; var romanic = ['I', 'IV', 'V', 'IX', 'X', 'XL', 'L']; var roman = ''; - var index = arabic.length -1; + var index = arabic.length - 1; while (num !== 0) { if (num >= arabic[index]) { num -= arabic[index]; From 6e54a9b6ab5385574efb90fb56103e68414acac6 Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 9 Oct 2016 20:40:47 +0500 Subject: [PATCH 06/13] =?UTF-8?q?=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D1=91=D0=BD=20=D0=BE=D1=82=D0=BB=D0=BE=D0=B2=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/roman-time.js b/roman-time.js index 396142a..845f6c4 100644 --- a/roman-time.js +++ b/roman-time.js @@ -6,8 +6,9 @@ */ function romanTime(time) { - - var arrayOfTime = time.split(':'); + var arrayOfTime = (time.toString()).split(':'); + console.log(parseInt(arrayOfTime[0], 10)) + console.log(parseInt(arrayOfTime[1], 10)) var hourArab = parseInt(arrayOfTime[0], 10); var minArab = parseInt(arrayOfTime[1], 10); if (checkHour(hourArab) + checkMinute(minArab) > 0) { From edb5c7d19005e65839dde73f84e626eed6d10c49 Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 9 Oct 2016 20:50:24 +0500 Subject: [PATCH 07/13] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BB?= =?UTF-8?q?=D0=B8=D1=88=D0=BD=D0=B5=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/roman-time.js b/roman-time.js index 845f6c4..f9c5f9a 100644 --- a/roman-time.js +++ b/roman-time.js @@ -6,9 +6,8 @@ */ function romanTime(time) { + checkTime(time); var arrayOfTime = (time.toString()).split(':'); - console.log(parseInt(arrayOfTime[0], 10)) - console.log(parseInt(arrayOfTime[1], 10)) var hourArab = parseInt(arrayOfTime[0], 10); var minArab = parseInt(arrayOfTime[1], 10); if (checkHour(hourArab) + checkMinute(minArab) > 0) { @@ -20,6 +19,12 @@ function romanTime(time) { return time; } +function checkTime(time) { + if (time === null || time === undefined) { + throw new TypeError('Неверное время'); + } + +} function checkHour(hourArab) { if (isNaN(hourArab) || hourArab > 23 || hourArab < 0) { From ff52868f8f0643b062c16d6d1537f76976bcd2ee Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 9 Oct 2016 21:35:14 +0500 Subject: [PATCH 08/13] =?UTF-8?q?=D0=B4=D0=BE=D0=BF=20=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=B8=D1=81=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/roman-time.js b/roman-time.js index f9c5f9a..4c73484 100644 --- a/roman-time.js +++ b/roman-time.js @@ -23,6 +23,10 @@ function checkTime(time) { if (time === null || time === undefined) { throw new TypeError('Неверное время'); } + var arrayTime = (time.toString()).split(':'); + if ((parseInt(arrayTime[0], 10)).toString() !== arrayTime[0]) { + throw new TypeError('Неверное время'); + } } From d9ea407d98ba58bd99fcd09919adec6f2abe0406 Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 9 Oct 2016 21:50:42 +0500 Subject: [PATCH 09/13] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=82=D0=BB=D0=BE=D0=B2=20=D0=BF=D1=80=D0=BE?= =?UTF-8?q?=D0=B1=D0=B5=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/roman-time.js b/roman-time.js index 4c73484..9b3aa1f 100644 --- a/roman-time.js +++ b/roman-time.js @@ -10,7 +10,7 @@ function romanTime(time) { var arrayOfTime = (time.toString()).split(':'); var hourArab = parseInt(arrayOfTime[0], 10); var minArab = parseInt(arrayOfTime[1], 10); - if (checkHour(hourArab) + checkMinute(minArab) > 0) { + if (checkHour(hourArab, arrayOfTime[0]) + checkMinute(minArab, arrayOfTime[1]) > 0 ) { throw new TypeError('Неверное время'); } var hourRoman = hourChange(hourArab); @@ -23,23 +23,18 @@ function checkTime(time) { if (time === null || time === undefined) { throw new TypeError('Неверное время'); } - var arrayTime = (time.toString()).split(':'); - if ((parseInt(arrayTime[0], 10)).toString() !== arrayTime[0]) { - throw new TypeError('Неверное время'); - } - } -function checkHour(hourArab) { - if (isNaN(hourArab) || hourArab > 23 || hourArab < 0) { +function checkHour(hourArab, stringHour) { + if (isNaN(hourArab) || hourArab > 23 || hourArab < 0 || /\s/g.test(stringHour)) { return 1; } return 0; } -function checkMinute(minArab) { - if (isNaN(minArab) || minArab > 59 || minArab < 0) { +function checkMinute(minArab, stringMin) { + if (isNaN(minArab) || minArab > 59 || minArab < 0 || /\s/g.test(stringMin)) { return 1; } From c0ef6bf0926868a3f338dc8d4956b995bb484b3c Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 9 Oct 2016 21:53:43 +0500 Subject: [PATCH 10/13] =?UTF-8?q?1=20=D0=BF=D1=80=D0=BE=D0=B1=D0=B5=D0=BB?= =?UTF-8?q?=20=D0=B1=D1=8B=D0=BB=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roman-time.js b/roman-time.js index 9b3aa1f..93b0a7a 100644 --- a/roman-time.js +++ b/roman-time.js @@ -10,7 +10,7 @@ function romanTime(time) { var arrayOfTime = (time.toString()).split(':'); var hourArab = parseInt(arrayOfTime[0], 10); var minArab = parseInt(arrayOfTime[1], 10); - if (checkHour(hourArab, arrayOfTime[0]) + checkMinute(minArab, arrayOfTime[1]) > 0 ) { + if (checkHour(hourArab, arrayOfTime[0]) + checkMinute(minArab, arrayOfTime[1]) > 0) { throw new TypeError('Неверное время'); } var hourRoman = hourChange(hourArab); From 0bbdee05fc8afce12b3bbaf19bc790b013e8fc77 Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 9 Oct 2016 22:19:30 +0500 Subject: [PATCH 11/13] =?UTF-8?q?=D0=B4=D0=BE=D0=BF=20=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=B8=D1=81=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B9(2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/roman-time.js b/roman-time.js index 93b0a7a..f958b13 100644 --- a/roman-time.js +++ b/roman-time.js @@ -19,14 +19,19 @@ function romanTime(time) { return time; } + function checkTime(time) { - if (time === null || time === undefined) { + var arrayTime = (time.toString()).split(':'); + if (time === null || time === undefined || arrayTime.length !== 2 || time.length !== 5) { + throw new TypeError('Неверное время'); + } + if (/[^[0-9,:]/.test(time)) { throw new TypeError('Неверное время'); } } function checkHour(hourArab, stringHour) { - if (isNaN(hourArab) || hourArab > 23 || hourArab < 0 || /\s/g.test(stringHour)) { + if (isNaN(hourArab) || hourArab > 23 || hourArab < 0) { return 1; } @@ -34,7 +39,7 @@ function checkHour(hourArab, stringHour) { } function checkMinute(minArab, stringMin) { - if (isNaN(minArab) || minArab > 59 || minArab < 0 || /\s/g.test(stringMin)) { + if (isNaN(minArab) || minArab > 59 || minArab < 0) { return 1; } From 51a9575a33f221bd70c15b897cc6231be76e1941 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=BE=D1=80=D1=81=D0=BA=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=93=D0=BB=D0=B5=D0=B1?= Date: Sun, 9 Oct 2016 22:27:44 +0500 Subject: [PATCH 12/13] =?UTF-8?q?=D0=BB=D0=B8=D0=BD=D1=82=D0=B8=D0=BD?= =?UTF-8?q?=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- roman-time.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/roman-time.js b/roman-time.js index f958b13..950951b 100644 --- a/roman-time.js +++ b/roman-time.js @@ -1,10 +1,5 @@ 'use strict'; -/** - * @param {String} time – время в формате HH:MM (например, 09:05) - * @returns {String} – время римскими цифрами (IX:V) - */ - function romanTime(time) { checkTime(time); var arrayOfTime = (time.toString()).split(':'); @@ -30,7 +25,7 @@ function checkTime(time) { } } -function checkHour(hourArab, stringHour) { +function checkHour(hourArab) { if (isNaN(hourArab) || hourArab > 23 || hourArab < 0) { return 1; } @@ -38,7 +33,7 @@ function checkHour(hourArab, stringHour) { return 0; } -function checkMinute(minArab, stringMin) { +function checkMinute(minArab) { if (isNaN(minArab) || minArab > 59 || minArab < 0) { return 1; } From 5e68da6fe6e34b9aaeadacad8b19b364bb6ce2be Mon Sep 17 00:00:00 2001 From: Zeace Date: Sun, 22 Mar 2020 18:53:42 +0500 Subject: [PATCH 13/13] 1test --- roman-time.js | 101 +++++++++++++++++--------------------------------- 1 file changed, 35 insertions(+), 66 deletions(-) diff --git a/roman-time.js b/roman-time.js index 950951b..e7c003e 100644 --- a/roman-time.js +++ b/roman-time.js @@ -1,83 +1,52 @@ 'use strict'; +/** + * @param {String} time – время в формате HH:MM (например, 09:05) + * @returns {String} – время римскими цифрами (IX:V) + */ function romanTime(time) { - checkTime(time); - var arrayOfTime = (time.toString()).split(':'); - var hourArab = parseInt(arrayOfTime[0], 10); - var minArab = parseInt(arrayOfTime[1], 10); - if (checkHour(hourArab, arrayOfTime[0]) + checkMinute(minArab, arrayOfTime[1]) > 0) { - throw new TypeError('Неверное время'); - } - var hourRoman = hourChange(hourArab); - var minRoman = minChange(minArab); - time = hourRoman + ':' + minRoman; - - return time; -} - -function checkTime(time) { - var arrayTime = (time.toString()).split(':'); - if (time === null || time === undefined || arrayTime.length !== 2 || time.length !== 5) { - throw new TypeError('Неверное время'); - } - if (/[^[0-9,:]/.test(time)) { - throw new TypeError('Неверное время'); - } -} -function checkHour(hourArab) { - if (isNaN(hourArab) || hourArab > 23 || hourArab < 0) { - return 1; + if (typeof(time) !== 'string') { + throw new TypeError('Введены неверные данные'); } - return 0; -} - -function checkMinute(minArab) { - if (isNaN(minArab) || minArab > 59 || minArab < 0) { - return 1; - } + function arabToRoman(number) { + let arab = [1, 4, 5, 9, 10, 40, 50]; + let roman = ['I', 'IV', 'V', 'IX', 'X', 'XL', 'L']; + let result = ''; - return 0; -} + for (let i = 6; number > 0;) { + if (number >= arab[i]) { + result += roman[i]; + number -= arab[i]; + i = 6; + } + i--; + } -function hourChange(hourArab) { - var hour = null; - if (hourArab === 0) { - hour = 'N'; - } else { - hour = parseNumber(hourArab); + return result; } - return hour; -} - -function minChange(minArab) { - var minute = null; - if (minArab === 0) { - minute = 'N'; - } else { - minute = parseNumber(minArab); + let strArr = time.split(':').slice(0, 2); + if (strArr.length > 2) { + throw new TypeError('Введены неверные данные'); } + let parseArr = strArr.map(function (item) { + if ((strArr[0] >= 0 && strArr[0] <= 23) && (strArr[1] >= 0 && strArr[1] <= 59)) { + return parseInt(item); + } + throw new TypeError('Введены неверные данные'); + }); - return minute; -} - -function parseNumber(num) { - var arabic = [1, 4, 5, 9, 10, 40, 50]; - var romanic = ['I', 'IV', 'V', 'IX', 'X', 'XL', 'L']; - var roman = ''; - var index = arabic.length - 1; - while (num !== 0) { - if (num >= arabic[index]) { - num -= arabic[index]; - roman += romanic[index]; - } else { - index--; + let result = parseArr.map(function (item) { + if (item === 0) { + return 'N'; } - } - return roman; + return arabToRoman(item); + }); + + return result.join(':'); } module.exports = romanTime;