forked from urfu-2017/javascript-task-1
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathroman-time.js
72 lines (58 loc) · 1.67 KB
/
roman-time.js
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
'use strict';
/**
* @param {String} time – время в формате HH:MM (например, 09:05)
* @returns {String} – время римскими цифрами (IX:V)
*/
function romanTime(time) {
// Немного авторского кода и замечательной магии
let regexp = /^[0-2][0-9]:[0-6][0-9]$/;
if (time.match(regexp) === null) {
throw new TypeError();
}
let hours = parseInt(time.split(':')[0]);
let minutes = parseInt(time.split(':')[1]);
if ((hours < 0 || hours > 23) || (minutes < 0 || minutes > 59)) {
throw new TypeError();
}
return getRoman(hours) + ':' + getRoman(minutes);
}
function getRoman(time) {
if (time === 0) {
return 'N';
}
return getUpperDigit(Math.floor(time / 10)) + getLowDigit(time % 10);
}
function getLowDigit(number) {
let digits = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'];
return digits[number];
/*
switch (number) {
case 1: return 'I';
case 2: return 'II';
case 3: return 'III';
case 4: return 'IV';
case 5: return 'V';
case 6: return 'VI';
case 7: return 'VII';
case 8: return 'VIII';
case 9: return 'IX';
default: return '';
}
*/
}
function getUpperDigit(number) {
let digits = ['', 'X', 'XX', 'XXX', 'XL', 'L', 'LX'];
return digits[number];
/*
switch (number) {
case 1: return 'X';
case 2: return 'XX';
case 3: return 'XXX';
case 4: return 'XL';
case 5: return 'L';
case 6: return 'LX';
default: return '';
}
*/
}
module.exports = romanTime;