forked from urfu-2017/javascript-task-1
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathroman-time.js
More file actions
56 lines (48 loc) · 1.57 KB
/
roman-time.js
File metadata and controls
56 lines (48 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
'use strict';
/**
* @param {String} time
* @returns {String}
*/
function romanTime(time) {
checkInput(time);
var numbers = time.split(':');
var firstNumber = parseInt(numbers[0]);
var secondNumber = parseInt(numbers[1]);
if (isNaN(firstNumber) || isNaN(secondNumber)) {
throw new TypeError('Invalid time format');
}
checkValidityOfTime(firstNumber, secondNumber);
time = numberToRomanStyle(firstNumber) + ':' + numberToRomanStyle(secondNumber);
return time;
}
module.exports = romanTime;
var ROMAN_DIGIT = { 0: '', 1: 'I', 2: 'II', 3: 'III', 4: 'IV', 5: 'V', 6: 'VI',
7: 'VII', 8: 'VIII', 9: 'IX' };
var ROMAN_DOZENS = { 0: '', 1: 'X', 2: 'XX', 3: 'XXX', 4: 'XL', 5: 'L' };
function numberToRomanStyle(num) {
var firstDigit = Math.floor(num / 10);
var secondDigit = num % 10;
var answer = '';
if (firstDigit === 0 && secondDigit === 0) {
answer += 'N';
} else {
answer += ROMAN_DOZENS[firstDigit] + ROMAN_DIGIT[secondDigit];
}
return answer;
}
function checkInput(data) {
if (data === null || data === undefined) {
throw new TypeError('Invalid time format.');
}
var regExp = new RegExp('\\d{2}:\\d{2}');
if (!(regExp.test(data)) || data.length !== 5) {
throw new TypeError('Invalid time format.');
}
}
function checkValidityOfTime(firstNumber, secondNumber) {
if (firstNumber < 0 || firstNumber > 23) {
throw new TypeError('Invalid time format');
} else if (secondNumber < 0 || secondNumber > 59) {
throw new TypeError('Invalid time format');
}
}