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
50 lines (41 loc) · 1.35 KB
/
roman-time.js
File metadata and controls
50 lines (41 loc) · 1.35 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
'use strict';
function getRomanNumber(number, isFirstNumber) {
if (number === 0 && isFirstNumber) {
return 'N';
}
let romanNumbers = [
{ number: 'L', value: 50 }, { number: 'XL', value: 40 },
{ number: 'X', value: 10 }, { number: 'IX', value: 9 },
{ number: 'V', value: 5 }, { number: 'IV', value: 4 },
{ number: 'I', value: 1 }
];
for (let i = 0; i < romanNumbers.length; i++) {
if (number >= romanNumbers[i].value) {
return romanNumbers[i].number + getRomanNumber(number - romanNumbers[i].value, false);
}
}
return '';
}
function numberIsBetween(number, valueMin, valueMax) {
return valueMin <= number && number <= valueMax;
}
function parseToInt(number) {
if (/^[0-9]+$/.test(number) && !isNaN(parseInt(number))) {
return parseInt(number);
}
return NaN;
}
function romanTime(time) {
let splittedTime = time.split(':');
if (splittedTime.length !== 2) {
throw new TypeError();
}
let hours = parseToInt(splittedTime[0]);
let minutes = parseToInt(splittedTime[1]);
if (isNaN(hours) || isNaN(minutes) ||
!numberIsBetween(hours, 0, 23) || !numberIsBetween(minutes, 0, 59)) {
throw new TypeError();
}
return getRomanNumber(hours, true) + ':' + getRomanNumber(minutes, true);
}
module.exports = romanTime;