forked from VladimirIvanov93/javascript-tasks-1
-
Notifications
You must be signed in to change notification settings - Fork 0
/
roman-time.js
107 lines (102 loc) · 2.92 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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
var hours = parseInt(process.argv[2]);
var minutes = parseInt(process.argv[3]);
var arabicNumerals = [1, 5, 10, 50];
var romanNumerals = [
'.___.'+
'| |'+
'| |'+
'| |'+
'|___|'+
' ',
'____ ____'+
'\\ \\ / /'+
' \\ Y / '+
' \\ / '+
' \\___/ '+
' ',
'____ ___'+
'\\ \\/ /'+
' \\ / '+
' / \\ '+
'/___/\\ \\'+
' \\_/',
'.___. '+
'| | '+
'| |___.'+
'| |'+
'|_______|'+
' ',
' '+
'|\\ |'+
'| \\ |'+
'| \\ |'+
'| \\|'+
' ',
' '+
' _ '+
' |_| '+
' _ '+
' |_| '+
' '
]
function joinAsciiNumerals (indexesArray) {
var indexesArray;
var result = '';
var NUMERALS_HEIGHT = 6;
/* j - счетчик строк
i - счетчик римских цифр и знаков
c - счетчик столбцов */
var j = 0;
while (j < NUMERALS_HEIGHT) {
for (var i = 0; i < indexesArray.length; i++) {
var numeralIndex = indexesArray[i];
var asciiNumeral = romanNumerals[numeralIndex];
var numeralWidth = asciiNumeral.length / NUMERALS_HEIGHT;
for (var c = j*numeralWidth; c < (j + 1)*numeralWidth; c++) {
result += asciiNumeral[c];
}
}
result += '\n';
j += 1;
}
return result;
}
function convertNumber(number) {
var number;
var resultIndexes = [];
if (number == 0) {
var ZERO_INDEX = 4;
resultIndexes.push(ZERO_INDEX);
return resultIndexes;
}
while (number != 0) {
/* перебираем числа, начиная с последнего,
в массиве arabicNumerals для того, чтобы
найти подходящее для записи римское число */
for (var i = arabicNumerals.length - 1; i >= 0; i--) {
/* j - индекс числа, которое можно вычесть
из взятого по индексу i */
var j = i - 2 + i % 2;
while (number / arabicNumerals[i] >= 1) {
resultIndexes.push(i);
number -= arabicNumerals[i];
}
if (j >= 0 && number / (arabicNumerals[i] - arabicNumerals[j]) >= 1) {
resultIndexes.push(j);
resultIndexes.push(i);
number -= arabicNumerals[i] - arabicNumerals[j];
}
}
}
return resultIndexes;
}
if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) {
console.log('Время указано не верно!');
}
else {
var result = convertNumber(hours);
var COLON_INDEX = 5;
result.push(COLON_INDEX);
result = result.concat(convertNumber(minutes));
console.log(joinAsciiNumerals(result));
}