forked from urfu-2016/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
88 lines (67 loc) · 1.69 KB
/
roman-time.js
File metadata and controls
88 lines (67 loc) · 1.69 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
81
82
83
84
85
86
87
'use strict';
/**
* @param {String} time – время в формате HH:MM (например, 09:05)
* @returns {String} – время римскими цифрами (IX:V)
*/
function romanTime(time) {
var mask = /^\d{2}:\d{2}$/;
if (!mask.test(time)) {
throw new TypeError('Неверное время');
}
var hours;
var minutes;
hours = parseInt((time.split(':', 2))[0], 10);
minutes = parseInt((time.split(':', 2))[1], 10);
if (isNotValidHours(hours) || isNotValidMinutes(minutes)) {
throw new TypeError('Неверное время');
}
var hoursR = convertNum(hours);
var minutesR = convertNum(minutes);
time = hoursR.concat(':', minutesR);
return time;
}
function convertNum(num) {
// Карта соответствия чисел
var accordMap = {
0: '',
1: 'I',
2: 'II',
3: 'III',
4: 'IV',
5: 'V',
6: 'VI',
7: 'VII',
8: 'VIII',
9: 'IX',
10: 'X',
20: 'XX',
30: 'XXX',
40: 'XL',
50: 'L'
};
// остаток от деления (для начала равен самому числу)
num = parseInt(num, 10);
if (num === 0) {
return 'N';
}
var dec;
var unit;
var rom;
dec = (parseInt(num / 10)) * 10;
unit = num % 10;
rom = accordMap[dec] + accordMap[unit];
return rom;
}
function isNotValidHours(h) {
if (isNaN(h) || h < 0 || h > 23) {
return true;
}
return false;
}
function isNotValidMinutes(m) {
if (isNaN(m) || m < 0 || m > 59) {
return true;
}
return false;
}
module.exports = romanTime;