From d88e5cec51519caf6187bade2ac35c8f20911f51 Mon Sep 17 00:00:00 2001 From: dreamzoul Date: Thu, 19 Oct 2017 01:13:47 +0500 Subject: [PATCH] =?UTF-8?q?=D1=8D=D1=82=D0=BE=20=D0=BD=D0=B5=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82.=20=D0=AF=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=D0=BD=D0=B8=D0=BC=D0=B0=D1=8E=20=D0=B7?= =?UTF-8?q?=D0=B0=D1=87=D0=B5=D0=BC=20=D0=B7=D0=B0=D0=B1=D1=80=D0=B5=D1=89?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=BE=D1=81=D1=8C?= =?UTF-8?q?=D0=B1=D0=B8=D0=B1=D0=B8=D1=82=D0=BD=D0=BE=D0=B9=20=D0=B1=D0=B8?= =?UTF-8?q?=D0=B1=D0=BB=D0=B8=D0=BE=D1=82=D0=B5=D0=BA=D0=B8=20=D0=B4=D0=B0?= =?UTF-8?q?=D1=82=D1=8B,=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=B8=D0=BD=D0=B0?= =?UTF-8?q?=D1=87=D0=B5=20=D0=BA=D0=BE=D0=B4=20=D0=BD=D0=B5=D0=BE=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B4=D0=B0=D0=BD=D0=BE=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=B4=D1=91=D1=82=D1=81=D1=8F=20=D1=83=D0=B2=D0=B5=D0=BB=D0=B8?= =?UTF-8?q?=D1=87=D0=B8=D0=B2=D0=B0=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 114 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index 4a8309d..28f82f7 100644 --- a/robbery.js +++ b/robbery.js @@ -15,7 +15,115 @@ exports.isStar = true; * @returns {Object} */ exports.getAppropriateMoment = function (schedule, duration, workingHours) { - console.info(schedule, duration, workingHours); + // сюда пишется код реализации, а в ретёрнах ретёрна выводящие функцяшки + // основная собирает 3 переменные как 3 строки и передаёт далее + // доп. взять строки и убрать последнюю часть отвечающуу за часовой пояс и представить время в нужном формате + + function mainFunction() { + let mainTimeZone = workingHours.from.substring + ((workingHours.from.length - 1), workingHours.from.length); + for (let i = 0; i >= 3; i++) { + let newValueDanny = timeAdaptation( + mainTimeZone, gangSchedule.Danny[i].from, gangSchedule.Danny[i].to); + let newValueRusty = timeAdaptation( + mainTimeZone, gangSchedule.Rusty[i].from, gangSchedule.Rusty[i].to); + let newValueLinus = timeAdaptation( + mainTimeZone, gangSchedule.Linus[i].from, gangSchedule.Linus[i].to); + + let searchOpportunity = searchOpportunity( + newValueDanny, newValueRusty, newValueLinus); + if (searchOpportunity) { + return true; + } else { + + return false; + } + } + } + + // адптирует время под часовой пояс банка + function timeAdaptation(tz, begin, end) { + let current = begin.substring(begin.length - 1, begin.length); + begin = parseToDate(begin.substring(3, 8)); + end = parseToDate(end.substring(3, 8)); + let shift = tz - current; + if (current !== tz) { + begin.setHours(begin.getHours + shift); + end.setHours(end.getHours + shift); + //begin = performance(begin, shift); + //end = performance(end, shift); + } + + return { begin, end } + } + + // переводит время в нужный диапазон по заданному сдвигу + /*function performance(str, shift) { + let num = Number(str.slice(0, 2)) + shift; + str = str.replace(Number(str.slice(0, 2)), num); + + return str; + }*/ + + // эта фунция выясняет совпадет ли возможное совместное время для операции (если оно есть) + function searchOpportunity(DannyOpp, RustyOpp, LinusOpp) { + let optimalStart = optimalStart(DannyOpp.from, RustyOpp.from, LinusOpp.from); + let optimalEnd = optimalStart(DannyOpp.to, RustyOpp.to, LinusOpp.to); + if (optimalStart >= optimalEnd) { + return false; + } else { + return difOfTime(optimalEnd, optimalStart); + } + } + + function difOfTime(time1, time2) { + time1 = parseToDate(time1); + time2 = parseToDate(time2); + let resul = (time1 - time2) / 60000; + return resul; + } + + function parseToDate(str) { + //let time = new Date('', '', '', time1.slice(0, 2), time1.slice(3, 6), 00, 00); + let time = new Date; + time.setHours(str.slice(0, 2)); + time.setMinutes(str.slice(3, 6)); + time.setSeconds(00); + time.setMilliseconds(00); + return time; + } + // исправить на никин алго + function optimalStart(t1, t2, t3) { + t1 = parseToDate(t1); + t2 = parseToDate(t2); + t3 = parseToDate(t3); + let max; + if (t1 > t2 && t1 > t3) { + max = t1; + } else if (t2 > t3) { + max = t2; + } else { + max = t3; + } + + return max; + } + + function optimalEnd(t1, t2, t3) { + t1 = parseToDate(t1); + t2 = parseToDate(t2); + t3 = parseToDate(t3); + let min; + if (t1 < t2 && t1 < t3) { + min = t1; + } else if (t2 < t3) { + min = t2; + } else { + min = t3; + } + + return min; + } return { @@ -24,7 +132,11 @@ exports.getAppropriateMoment = function (schedule, duration, workingHours) { * @returns {Boolean} */ exists: function () { - return false; + if (mainFunction()){ + return true; + } else { + return false; + } }, /**