forked from urfu-2017/javascript-task-3
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrobbery.js
More file actions
124 lines (110 loc) · 3.87 KB
/
robbery.js
File metadata and controls
124 lines (110 loc) · 3.87 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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
'use strict';
/**
* Сделано задание на звездочку
* Реализовано оба метода и tryLater
*/
exports.isStar = false;
/**
* @param {Object} schedule – Расписание Банды
* @param {Number} duration - Время на ограбление в минутах
* @param {Object} workingHours – Время работы банка
* @param {String} workingHours.from – Время открытия, например, "10:00+5"
* @param {String} workingHours.to – Время закрытия, например, "18:00+5"
* @returns {Object}
*/
exports.getAppropriateMoment = function (schedule, duration, workingHours) {
console.info(schedule, duration, workingHours);
var BANKTIMEZONE = Number(workingHours.from.match(/\d+$/));
function timeFormat(timeRobber) {
var timeRobberHours = Number(timeRobber.match(/\d\d:/)[0].slice(0, 2));
var timeRobberZone = Number(timeRobber.match(/\d+$/));
var timeRobberMinutes = Number(timeRobber.match(/:\d\d/)[0].slice(1));
var timeAsBank = ((timeRobberHours + (BANKTIMEZONE - timeRobberZone))) * 60 +
timeRobberMinutes;
var day = timeRobber.slice(0, 2);
switch (day) {
case 'ВТ': timeAsBank += 24 * 60;
break;
case 'СР': timeAsBank += 24 * 60;
break;
case 'ЧТ': timeAsBank += 24 * 60;
break;
case 'ПТ': timeAsBank += 24 * 60;
break;
case 'СБ': timeAsBank += 24 * 60;
break;
default:
break;
}
return timeAsBank;
}
var bool = true;
function newFunction(i, k, all) {
while (i + k < all.length) {
if (all[i].from >= all[i + k].from && all[i].from <= all[i + k].to) {
all[i].from = all[i + k].from;
all[i].to = Math.max(all[i].to, all[i + k].to);
all.splice(i + k, 1);
} else if (all[i].to >= all[i + k].from && all[i].from <= all[i + k].to) {
all[i].from = Math.min(all[i].from, all[i + k].from);
all[i].to = all[i + 1].to;
all.splice(i + k, 1);
} else if (all[i].from < all[i + k].from && all[i].to > all[i + k].to) {
all[i].from = all[i].from;
all[i].to = all[i].to;
all.splice(i + k, 1);
} else {
bool = false;
}
k += 1;
}
}
function intervalBig(all) {
for (var i = 0; i < all.length - 1; i++) {
var k = 1;
newFunction(i, k, all);
if (bool) {
i = 0;
}
}
return all;
}
var all = [];
for (var key in schedule) {
if (schedule.hasOwnProperty(key)) {
schedule[key]
.forEach(fromTo => all.push({
from: timeFormat(fromTo.from),
to: timeFormat(fromTo.to)
}));
}
}
console.info(intervalBig(all));
return {
/**
* Найдено ли время
* @returns {Boolean}
*/
exists: function () {
return false;
},
/**
* Возвращает отформатированную строку с часами для ограбления
* Например,
* "Начинаем в %HH:%MM (%DD)" -> "Начинаем в 14:59 (СР)"
* @param {String} template
* @returns {String}
*/
format: function (template) {
return template;
},
/**
* Попробовать найти часы для ограбления позже [*]
* @star
* @returns {Boolean}
*/
tryLater: function () {
return false;
}
};
};