From ed5633af7aa6d6e3058ee7a1343eb1759093e298 Mon Sep 17 00:00:00 2001 From: Evgeny Gudkov Date: Mon, 4 Sep 2017 10:28:55 +0300 Subject: [PATCH 1/7] Test commit, format heading in README --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1dc70e4..b8f7ee2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -# Задача «XXL» +# # # # # # # # # +# Задача «XXL» # +# # # # # # # # # Перед выполнением задания внимательно прочитайте: From d0b205562363712bb32b9b9d371da9fd1c91f020 Mon Sep 17 00:00:00 2001 From: Evgeny Gudkov Date: Wed, 6 Sep 2017 19:44:06 +0300 Subject: [PATCH 2/7] Set 'ecmaVersion=6' to support 'const' --- .eslintrc.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index db814bf..b2cf6db 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,3 +1,6 @@ { - "extends": "hrundel/node" + "extends": "hrundel/node", + "parserOptions": { + "ecmaVersion": 6 + } } From 644cacdbacbaf49b3ab51e5e53463b3f35492747 Mon Sep 17 00:00:00 2001 From: Evgeny Gudkov Date: Wed, 6 Sep 2017 19:44:06 +0300 Subject: [PATCH 3/7] Set 'ecmaVersion=6' to support 'const' --- .eslintrc.json | 5 ++++- README.md | 4 +--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index db814bf..b2cf6db 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,3 +1,6 @@ { - "extends": "hrundel/node" + "extends": "hrundel/node", + "parserOptions": { + "ecmaVersion": 6 + } } diff --git a/README.md b/README.md index b8f7ee2..e7b336e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,4 @@ -# # # # # # # # # -# Задача «XXL» # -# # # # # # # # # +# Задача «XXL» Перед выполнением задания внимательно прочитайте: From 45bd034ba9f8c5faa6d75a843f08e3e25c37e35b Mon Sep 17 00:00:00 2001 From: Evgeny Gudkov Date: Wed, 6 Sep 2017 20:16:41 +0300 Subject: [PATCH 4/7] Revert "Test commit, format heading in README" This reverts commit ed5633af7aa6d6e3058ee7a1343eb1759093e298. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7b336e..1dc70e4 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Задача «XXL» +# Задача «XXL» Перед выполнением задания внимательно прочитайте: From 01d1a84cfca8483552940258b00a492e1b1afeae Mon Sep 17 00:00:00 2001 From: Evgeny Gudkov Date: Wed, 6 Sep 2017 22:49:32 +0300 Subject: [PATCH 5/7] Solution to the task, rev. 1 --- roman-time.js | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/roman-time.js b/roman-time.js index f66353e..dfcaa98 100644 --- a/roman-time.js +++ b/roman-time.js @@ -5,8 +5,47 @@ * @returns {String} – время римскими цифрами (IX:V) */ function romanTime(time) { - // Немного авторского кода и замечательной магии - return time; + if (isValid(time) === false) { + throw new TypeError(); + } + + var hours = time.split(':')[0]; + var minutes = time.split(':')[1]; + + var romanHours = toRoman(hours); + var romanMinutes = toRoman(minutes); + + return romanHours + ':' + romanMinutes; +} + +function isValid(time) { + if (typeof time === 'string' && time.length === 5 && time.charAt(2) === ':') { + + var hours = parseInt(time.substring(0, 2), 10); + var minutes = parseInt(time.substring(3, 5), 10); + + if (!isNaN(hours) && !isNaN(minutes) && + hours>= 0 && hours <= 23 && + minutes>= 0 && minutes <= 59) { + return true; + } + } + + return false; +} + +function toRoman(number) { + if (number === '00') { + return 'N'; + } + + var romanDictTens = { '0': '', '1': 'X', '2': 'XX', '3': 'XXX', '4': 'XL', '5': 'L' }; + var romanDictOnes = { '0': '', '1': 'I', '2': 'II', '3': 'III', '4': 'IV', + '5': 'V', '6': 'VI', '7': 'VII', '8': 'VIII', '9': 'IX' }; + + var digits = number.split(''); + + return romanDictTens[digits[0]] + romanDictOnes[digits[1]]; } module.exports = romanTime; From b039e7114fcd8aa5f3ea9011b26e0b85d1830493 Mon Sep 17 00:00:00 2001 From: Evgeny Gudkov Date: Fri, 8 Sep 2017 00:13:54 +0300 Subject: [PATCH 6/7] slice and Number instead of substring and parseInt --- roman-time.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roman-time.js b/roman-time.js index dfcaa98..f0c40c9 100644 --- a/roman-time.js +++ b/roman-time.js @@ -21,8 +21,8 @@ function romanTime(time) { function isValid(time) { if (typeof time === 'string' && time.length === 5 && time.charAt(2) === ':') { - var hours = parseInt(time.substring(0, 2), 10); - var minutes = parseInt(time.substring(3, 5), 10); + var hours = Number(time.slice(0, 2)); + var minutes = Number(time.slice(3, 5)); if (!isNaN(hours) && !isNaN(minutes) && hours>= 0 && hours <= 23 && From ba53bafc80b858b5cc5ef6529d0c835081db1b26 Mon Sep 17 00:00:00 2001 From: Evgeny Gudkov Date: Fri, 8 Sep 2017 00:45:57 +0300 Subject: [PATCH 7/7] Replaced validation rules with regexp --- roman-time.js | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/roman-time.js b/roman-time.js index f0c40c9..d321959 100644 --- a/roman-time.js +++ b/roman-time.js @@ -19,16 +19,9 @@ function romanTime(time) { } function isValid(time) { - if (typeof time === 'string' && time.length === 5 && time.charAt(2) === ':') { - - var hours = Number(time.slice(0, 2)); - var minutes = Number(time.slice(3, 5)); - - if (!isNaN(hours) && !isNaN(minutes) && - hours>= 0 && hours <= 23 && - minutes>= 0 && minutes <= 59) { - return true; - } + var timeFormatRegExp = /^([0-1][0-9])|(2[0-3]):[0-5][0-9]$/; + if (typeof time === 'string' && timeFormatRegExp.test(time) === true) { + return true; } return false;

AltStyle によって変換されたページ (->オリジナル) /