From 5e7fa3f0caedcd02436afc0d91fd4c3fe3c18141 Mon Sep 17 00:00:00 2001 From: art-ylem Date: Wed, 18 Oct 2017 23:48:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=B5=D0=B4=D0=BE=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB,=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B8=D1=82=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=89=D0=B5=D0=B5=20=D0=B7=D0=B0=D0=BD=D1=8F=D1=82?= =?UTF-8?q?=D0=BE=D0=B5=20=D0=B2=D1=80=D0=B5=D0=BC=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 4a8309d..5f18b7d 100644 --- a/robbery.js +++ b/robbery.js @@ -4,7 +4,7 @@ * Сделано задание на звездочку * Реализовано оба метода и tryLater */ -exports.isStar = true; +exports.isStar = false; /** * @param {Object} schedule – Расписание Банды @@ -14,8 +14,82 @@ exports.isStar = true; * @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 {