diff --git a/roman-time.js b/roman-time.js index f66353e..29bdf02 100644 --- a/roman-time.js +++ b/roman-time.js @@ -1,12 +1,75 @@ 'use strict'; +/** + * @param {Number} data – получает на вход число - часы или минуты (например, 3) + * @returns {String} – римскую версию числа (III) + */ +function returnRomanTime(data) { + var HNumbers = { + 0: '', + 1: 'X', + 2: 'XX', + 3: 'XXX', + 4: 'XL', + 5: 'L' + }; + var BNumbers = { + 0: ' ', + 1: 'I', + 2: 'II', + 3: 'III', + 4: 'IV', + 5: 'V', + 6: 'VI', + 7: 'VII', + 8: 'VIII', + 9: 'IX' + }; + if (data === 0) { + return "N"; + } + return HNumbers[Math.floor(data / 10)] + BNumbers[Math.floor(data % 10)]; + } + +/** + * @param {Number} h – часы (например, 12) + * @param {Number} m - минуты (например, 12) + */ +function isValidate(h, m) { + if (h < 0 || h > 23 || m < 0 || m > 59) { + throw new TypeError('Неверное время'); + } +} + +/** + + * @param {String} data – часы или минуты (например, 12) + + * @returns {Number} m - минуты (например, 12) + */ +function ERTime(data) { + var re = /^\d\d$/; + if (!re.test(data)) { + throw new TypeError('Неверное время'); + } + try { + return parseInt(data); + } catch (e) { + throw new TypeError('Неверное время'); + } + + } + /** * @param {String} time – время в формате HH:MM (например, 09:05) * @returns {String} – время римскими цифрами (IX:V) */ function romanTime(time) { - // Немного авторского кода и замечательной магии + if (typeof time !== 'string' && time.length !== 5) { + throw new TypeError('Неверное время'); + } + var startTime = time.split(':'); + var hours = ERTime(startTime[0]); + var minutes = ERTime(startTime[1]); + isValidate(hours, minutes); + time = returnRomanTime(hours) + ":" + returnRomanTime(minutes); return time; } - -module.exports = romanTime; diff --git a/roman-time.spec.js b/roman-time.spec.js index 0dcbd5f..37dedd1 100644 --- a/roman-time.spec.js +++ b/roman-time.spec.js @@ -1,23 +1,22 @@ -/* eslint-env mocha */ -'use strict'; - -var assert = require('assert'); var romanTime = require('./roman-time'); describe('Модуль roman-time', function () { - it('должен возвращать для 09:10 значение IX:X', function () { - assert.strictEqual(romanTime('09:10'), 'IX:X'); - }); + it('должен выбрасывать исключение TypeError для 9:10', function () { + assert.throws(romanTime.bind(null, '9:10'), TypeError); + }); - it('должен возвращать для 00:00 значение N:N', function () { - assert.strictEqual(romanTime('00:00'), 'N:N'); - }); - - it('должен возвращать для 23:59 значение XXIII:LIX', function () { - assert.strictEqual(romanTime('23:59'), 'XXIII:LIX'); - }); + it('должен выбрасывать исключение TypeError для 09:1', function () { + assert.throws(romanTime.bind(null, '09:1'), TypeError); + }); - it('должен выбрасывать исключение TypeError для 24:00', function () { - assert.throws(romanTime.bind(null, '24:00'), TypeError); + it('должен возвращать для 09:10 значение IX:X', function () { + assert.strictEqual(romanTime('09:10'), 'IX:X'); + }); + @@ -20,4 +28,7 @@ describe('Модуль roman-time', function () { + it('должен выбрасывать исключение TypeError для 24:00', function () { + assert.throws(romanTime.bind(null, '24:00'), TypeError); + }); + it('должен выбрасывать исключение TypeError для 2d:00', function () { + assert.throws(romanTime.bind(null, '2d:00'), TypeError); + }); }); -});