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
80 lines (68 loc) · 2.2 KB
/
roman-time.js
File metadata and controls
80 lines (68 loc) · 2.2 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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
'use strict';
/**
* @param {String} time – время в формате HH:MM (например, 09:05)
* @returns {String} – время римскими цифрами (IX:V)
*/
function romanTime(time) {
var hour = '';
var minutes = '';
var hoursMinutes = time.split(':');
if (isDataCorrect(hoursMinutes)) {
if (hoursMinutes[0][0] === '0') {
hoursMinutes[0] = hoursMinutes[0][1];
}
if (hoursMinutes[1][0] === '0') {
hoursMinutes[1] = hoursMinutes[1][1];
}
if (isTimeCorrect(Number(hoursMinutes[0]), Number(hoursMinutes[1]))) {
hour = arabicToRoman(Number(hoursMinutes[0]));
minutes = arabicToRoman(Number(hoursMinutes[1]));
} else {
throw new TypeError();
}
} else {
throw new TypeError();
}
return hour + ':' + minutes;
}
function isDataCorrect(hoursMinutes) {
if (hoursMinutes.length > 2 || hoursMinutes[0].length > 2 || hoursMinutes[1].length > 2 ||
isNaN(hoursMinutes[0]) || isNaN(hoursMinutes[1])) {
return false;
}
return true;
}
function isTimeCorrect(hours, minutes) {
if (hours < 0 || hours > 23) {
return false;
}
if (minutes < 0 || minutes > 59) {
return false;
}
return true;
}
function arabicToRoman(num) {
var romanNumbers = [];
romanNumbers.push(
{ roman: 'I', arabic: 1 }, { roman: 'II', arabic: 2 }, { roman: 'III', arabic: 3 },
{ roman: 'IV', arabic: 4 }, { roman: 'V', arabic: 5 }, { roman: 'VI', arabic: 6 },
{ roman: 'VII', arabic: 7 }, { roman: 'VIII', arabic: 8 }, { roman: 'IX', arabic: 9 },
{ roman: 'X', arabic: 10 }, { roman: 'XX', arabic: 20 }, { roman: 'XXX', arabic: 30 },
{ roman: 'XL', arabic: 40 }, { roman: 'L', arabic: 50 }, { roman: 'LX', arabic: 60 });
var i = romanNumbers.length - 1;
var number = num;
var romanStr = '';
while (number > 0) {
if (number >= romanNumbers[i].arabic) {
number -= romanNumbers[i].arabic;
romanStr += romanNumbers[i].roman;
} else {
i--;
}
}
if (num === 0) {
return 'N';
}
return romanStr;
}
module.exports = romanTime;