From cb2b82107f250bea1aa00575f3f19932926b8d1e Mon Sep 17 00:00:00 2001 From: simple_man Date: Sun, 28 Oct 2018 20:52:45 +0500 Subject: [PATCH 01/17] 1 commit --- robbery.js | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 3 deletions(-) diff --git a/robbery.js b/robbery.js index ed84b5d..9a660ba 100755 --- a/robbery.js +++ b/robbery.js @@ -5,7 +5,66 @@ * Реализовано оба метода и tryLater */ const isStar = true; +const DAYS_KEYS= { 'ПН': 0, 'ВТ': 1, 'СР': 2, 'ЧТ': 3, 'ПТ': 4, 'СБ': 5, 'ВС': 6 }; +const NUMBER_KEYS = { 0: 'ПН', 1: 'ВТ', 2: 'СР', 3: 'ЧТ', 4: 'ПТ', 5: 'СБ', 6: 'ВС' }; +function getDeltaTime(str) { + return parseInt(str.match(/[+]\d+/).toString().substr(1)); +} + +function getHoursFromStr(str) { + let hour = str.match(/\d+:/).toString(); + return parseInt(hour.substring(0,hour.length-1)); +} + +function getDayFromStr(str) { + return str.match(/[А-Я]{2}/).toString(); +} + +function getMinutesFromStr(str) { + let minute = str.match(/:\d+/).toString(); + return parseInt(minute.substr(1)); +} + +function caseMinusDeltaTime(time, day, delta) { + if (time + delta >= 24) { + time = time + delta - 24; + let temp = DAYS_KEYS[day]; + temp++; + day = NUMBER_KEYS[temp]; + } else { + time = time + delta; + } + return day + " " + time; +} + +function convertTimeZone(manSchedule, bankTimeDelta) { + const deltaMan = getDeltaTime(manSchedule[0].from); + if (deltaMan == bankTimeDelta) { + return manSchedule; + } + if (deltaMan < bankTimeDelta) { + let delta = bankTimeDelta - deltaMan; + for (let i = 0; i < manSchedule.length; i++) { + let fromStr = manSchedule[i].from; + let toStr = manSchedule[i].to; + let fromTime = getHoursFromStr(fromStr); + let toTime = getHoursFromStr(toStr); + let fromDay = getDayFromStr(fromStr); + let toDay = getDayFromStr(toStr); + let fromMinutes = getMinutesFromStr(fromStr); + let toMinutes = getMinutesFromStr(toStr); + manSchedule[i].from = caseMinusDeltaTime(fromTime, fromDay, delta) + ':' + fromMinutes + '+' + bankTimeDelta; + manSchedule[i].to = caseMinusDeltaTime(toTime, toDay, delta) + ':' + toMinutes + '+' + bankTimeDelta; + } + return manSchedule; + } +} + +function findRoberyTime(schedule, duration, workingHours) { + const bankTimeDelta = getDeltaTime(workingHours.from); + console.info(convertTimeZone(schedule.Linus, bankTimeDelta)); +} /** * @param {Object} schedule – Расписание Банды * @param {Number} duration - Время на ограбление в минутах @@ -15,10 +74,9 @@ const isStar = true; * @returns {Object} */ function getAppropriateMoment(schedule, duration, workingHours) { - console.info(schedule, duration, workingHours); - + //console.info(schedule, duration, workingHours); + findRoberyTime(schedule, duration, workingHours); return { - /** * Найдено ли время * @returns {Boolean} From af526edce8435dc0dccebf92053ba71fdf902566 Mon Sep 17 00:00:00 2001 From: simple_man Date: Sun, 28 Oct 2018 21:06:41 +0500 Subject: [PATCH 02/17] 2 commit --- robbery.js | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/robbery.js b/robbery.js index 9a660ba..bfe0a52 100755 --- a/robbery.js +++ b/robbery.js @@ -26,11 +26,11 @@ function getMinutesFromStr(str) { return parseInt(minute.substr(1)); } -function caseMinusDeltaTime(time, day, delta) { +function casePlusDeltaTime(time, day, delta) { if (time + delta >= 24) { time = time + delta - 24; let temp = DAYS_KEYS[day]; - temp++; + temp = (temp == 6) ? 0 : temp++; day = NUMBER_KEYS[temp]; } else { time = time + delta; @@ -38,6 +38,19 @@ function caseMinusDeltaTime(time, day, delta) { return day + " " + time; } +function caseMinusDeltaTime(time, day, delta) { + if (time - delta < 0) { + let kek = delta - time; + time = 24 - kek; + let temp = DAYS_KEYS[day]; + temp = (temp == 0) ? 6 : temp--; + day = NUMBER_KEYS[temp]; + } else { + time = time - delta; + } + return day + " " + time; +} + function convertTimeZone(manSchedule, bankTimeDelta) { const deltaMan = getDeltaTime(manSchedule[0].from); if (deltaMan == bankTimeDelta) { @@ -45,6 +58,22 @@ function convertTimeZone(manSchedule, bankTimeDelta) { } if (deltaMan < bankTimeDelta) { let delta = bankTimeDelta - deltaMan; + for (let i = 0; i < manSchedule.length; i++) { + let fromStr = manSchedule[i].from; + let toStr = manSchedule[i].to; + let fromTime = getHoursFromStr(fromStr); + let toTime = getHoursFromStr(toStr); + let fromDay = getDayFromStr(fromStr); + let toDay = getDayFromStr(toStr); + let fromMinutes = getMinutesFromStr(fromStr); + let toMinutes = getMinutesFromStr(toStr); + manSchedule[i].from = casePlusDeltaTime(fromTime, fromDay, delta) + ':' + fromMinutes + '+' + bankTimeDelta; + manSchedule[i].to = casePlusDeltaTime(toTime, toDay, delta) + ':' + toMinutes + '+' + bankTimeDelta; + } + return manSchedule; + } + if (deltaMan > bankTimeDelta) { + let delta = deltaMan - bankTimeDelta; for (let i = 0; i < manSchedule.length; i++) { let fromStr = manSchedule[i].from; let toStr = manSchedule[i].to; From fe4c5a695edf20e8dde745fdab852388a8eaa522 Mon Sep 17 00:00:00 2001 From: simple_man Date: Sun, 28 Oct 2018 21:20:30 +0500 Subject: [PATCH 03/17] refactor --- robbery.js | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/robbery.js b/robbery.js index bfe0a52..311d545 100755 --- a/robbery.js +++ b/robbery.js @@ -54,6 +54,12 @@ function caseMinusDeltaTime(time, day, delta) { function convertTimeZone(manSchedule, bankTimeDelta) { const deltaMan = getDeltaTime(manSchedule[0].from); if (deltaMan == bankTimeDelta) { + for (let i = 0; i < manSchedule.length; i++) { + let fromStr = manSchedule[i].from; + let toStr = manSchedule[i].to; + manSchedule[i].from = getDayFromStr(fromStr) + ' ' + getHoursFromStr(fromStr) + ':' + getMinutesFromStr(fromStr) + '+' + bankTimeDelta; + manSchedule[i].to = getDayFromStr(toStr) + ' ' + getHoursFromStr(toStr) + ':' + getMinutesFromStr(toStr) + '+' + bankTimeDelta; + } return manSchedule; } if (deltaMan < bankTimeDelta) { @@ -61,14 +67,8 @@ function convertTimeZone(manSchedule, bankTimeDelta) { for (let i = 0; i < manSchedule.length; i++) { let fromStr = manSchedule[i].from; let toStr = manSchedule[i].to; - let fromTime = getHoursFromStr(fromStr); - let toTime = getHoursFromStr(toStr); - let fromDay = getDayFromStr(fromStr); - let toDay = getDayFromStr(toStr); - let fromMinutes = getMinutesFromStr(fromStr); - let toMinutes = getMinutesFromStr(toStr); - manSchedule[i].from = casePlusDeltaTime(fromTime, fromDay, delta) + ':' + fromMinutes + '+' + bankTimeDelta; - manSchedule[i].to = casePlusDeltaTime(toTime, toDay, delta) + ':' + toMinutes + '+' + bankTimeDelta; + manSchedule[i].from = casePlusDeltaTime(getHoursFromStr(fromStr), getDayFromStr(fromStr), delta) + ':' + getMinutesFromStr(fromStr) + '+' + bankTimeDelta; + manSchedule[i].to = casePlusDeltaTime(getHoursFromStr(toStr), getDayFromStr(toStr), delta) + ':' + getMinutesFromStr(toStr) + '+' + bankTimeDelta; } return manSchedule; } @@ -77,14 +77,8 @@ function convertTimeZone(manSchedule, bankTimeDelta) { for (let i = 0; i < manSchedule.length; i++) { let fromStr = manSchedule[i].from; let toStr = manSchedule[i].to; - let fromTime = getHoursFromStr(fromStr); - let toTime = getHoursFromStr(toStr); - let fromDay = getDayFromStr(fromStr); - let toDay = getDayFromStr(toStr); - let fromMinutes = getMinutesFromStr(fromStr); - let toMinutes = getMinutesFromStr(toStr); - manSchedule[i].from = caseMinusDeltaTime(fromTime, fromDay, delta) + ':' + fromMinutes + '+' + bankTimeDelta; - manSchedule[i].to = caseMinusDeltaTime(toTime, toDay, delta) + ':' + toMinutes + '+' + bankTimeDelta; + manSchedule[i].from = caseMinusDeltaTime(getHoursFromStr(fromStr), getDayFromStr(fromStr), delta) + ':' + getMinutesFromStr(fromStr) + '+' + bankTimeDelta; + manSchedule[i].to = caseMinusDeltaTime(getHoursFromStr(toStr), getDayFromStr(toStr), delta) + ':' + getMinutesFromStr(toStr) + '+' + bankTimeDelta; } return manSchedule; } @@ -92,7 +86,12 @@ function convertTimeZone(manSchedule, bankTimeDelta) { function findRoberyTime(schedule, duration, workingHours) { const bankTimeDelta = getDeltaTime(workingHours.from); - console.info(convertTimeZone(schedule.Linus, bankTimeDelta)); + /*console.info(convertTimeZone(schedule.Danny, bankTimeDelta)); + console.info(convertTimeZone(schedule.Rusty, bankTimeDelta)); + console.info(convertTimeZone(schedule.Linus, bankTimeDelta));*/ + schedule.Danny = convertTimeZone(schedule.Danny, bankTimeDelta); + schedule.Rusty = convertTimeZone(schedule.Rusty, bankTimeDelta); + schedule.Linus = convertTimeZone(schedule.Linus, bankTimeDelta); } /** * @param {Object} schedule – Расписание Банды From 4d70dd0df4554958d271525dc09b39c4177abf89 Mon Sep 17 00:00:00 2001 From: simple_man Date: Sun, 28 Oct 2018 22:24:35 +0500 Subject: [PATCH 04/17] =?UTF-8?q?=D0=B4=D0=B0=D0=B4=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/robbery.js b/robbery.js index 311d545..59d6a1a 100755 --- a/robbery.js +++ b/robbery.js @@ -4,10 +4,19 @@ * Сделано задание на звездочку * Реализовано оба метода и tryLater */ -const isStar = true; +const isStar = false; const DAYS_KEYS= { 'ПН': 0, 'ВТ': 1, 'СР': 2, 'ЧТ': 3, 'ПТ': 4, 'СБ': 5, 'ВС': 6 }; const NUMBER_KEYS = { 0: 'ПН', 1: 'ВТ', 2: 'СР', 3: 'ЧТ', 4: 'ПТ', 5: 'СБ', 6: 'ВС' }; +function clone(obj) { + if (null == obj || "object" != typeof obj) return obj; + var copy = obj.constructor(); + for (var attr in obj) { + if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; + } + return copy; +} + function getDeltaTime(str) { return parseInt(str.match(/[+]\d+/).toString().substr(1)); } @@ -52,7 +61,7 @@ function caseMinusDeltaTime(time, day, delta) { } function convertTimeZone(manSchedule, bankTimeDelta) { - const deltaMan = getDeltaTime(manSchedule[0].from); + let deltaMan = getDeltaTime(manSchedule[0].from); if (deltaMan == bankTimeDelta) { for (let i = 0; i < manSchedule.length; i++) { let fromStr = manSchedule[i].from; @@ -84,14 +93,34 @@ function convertTimeZone(manSchedule, bankTimeDelta) { } } +function convertOccupiedSchedule(scheduleMan) { + for (let i = 0; i < scheduleMan.length; i++) { + let fromStr = scheduleMan[i].from; + let toStr = scheduleMan[i].to; + let fromDay = getDayFromStr(fromStr); + let toDay = getDayFromStr(toStr); + let fromHour = getHoursFromStr(fromStr); + let toHour = getHoursFromStr(toStr); + let fromMinutes = getMinutesFromStr(fromStr); + let toMinutes = getMinutesFromStr(toStr); + let fromTime = fromHour*60 + fromMinutes; + let toTime = toHour*60 + toMinutes; + scheduleMan[i].from = fromDay + ' ' + fromTime; + scheduleMan[i].to = toDay + ' ' + toTime; + } + return scheduleMan; +} + function findRoberyTime(schedule, duration, workingHours) { const bankTimeDelta = getDeltaTime(workingHours.from); - /*console.info(convertTimeZone(schedule.Danny, bankTimeDelta)); - console.info(convertTimeZone(schedule.Rusty, bankTimeDelta)); - console.info(convertTimeZone(schedule.Linus, bankTimeDelta));*/ schedule.Danny = convertTimeZone(schedule.Danny, bankTimeDelta); schedule.Rusty = convertTimeZone(schedule.Rusty, bankTimeDelta); schedule.Linus = convertTimeZone(schedule.Linus, bankTimeDelta); + let kek = clone(schedule); + kek.Danny = convertOccupiedSchedule(schedule.Danny); + kek.Rusty = convertOccupiedSchedule(schedule.Rusty); + kek.Linus = convertOccupiedSchedule(schedule.Linus); + console.info(kek); } /** * @param {Object} schedule – Расписание Банды @@ -102,8 +131,9 @@ function findRoberyTime(schedule, duration, workingHours) { * @returns {Object} */ function getAppropriateMoment(schedule, duration, workingHours) { - //console.info(schedule, duration, workingHours); - findRoberyTime(schedule, duration, workingHours); + console.info(schedule, duration, workingHours); + let kek = clone(schedule); + findRoberyTime(kek, duration, workingHours); return { /** * Найдено ли время From de06bbe57bb6e53aad13ebd4d12d0037013b34b0 Mon Sep 17 00:00:00 2001 From: simple_man Date: Sun, 11 Nov 2018 21:55:01 +0500 Subject: [PATCH 05/17] kek --- robbery.js | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/robbery.js b/robbery.js index 59d6a1a..0d2b2db 100755 --- a/robbery.js +++ b/robbery.js @@ -8,15 +8,6 @@ const isStar = false; const DAYS_KEYS= { 'ПН': 0, 'ВТ': 1, 'СР': 2, 'ЧТ': 3, 'ПТ': 4, 'СБ': 5, 'ВС': 6 }; const NUMBER_KEYS = { 0: 'ПН', 1: 'ВТ', 2: 'СР', 3: 'ЧТ', 4: 'ПТ', 5: 'СБ', 6: 'ВС' }; -function clone(obj) { - if (null == obj || "object" != typeof obj) return obj; - var copy = obj.constructor(); - for (var attr in obj) { - if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; - } - return copy; -} - function getDeltaTime(str) { return parseInt(str.match(/[+]\d+/).toString().substr(1)); } @@ -113,13 +104,11 @@ function convertOccupiedSchedule(scheduleMan) { function findRoberyTime(schedule, duration, workingHours) { const bankTimeDelta = getDeltaTime(workingHours.from); - schedule.Danny = convertTimeZone(schedule.Danny, bankTimeDelta); - schedule.Rusty = convertTimeZone(schedule.Rusty, bankTimeDelta); - schedule.Linus = convertTimeZone(schedule.Linus, bankTimeDelta); - let kek = clone(schedule); - kek.Danny = convertOccupiedSchedule(schedule.Danny); - kek.Rusty = convertOccupiedSchedule(schedule.Rusty); - kek.Linus = convertOccupiedSchedule(schedule.Linus); + var kek = JSON.stringify(schedule); + kek = JSON.parse(kek); + kek.Danny = convertTimeZone(kek.Danny, bankTimeDelta); + kek.Rusty = convertTimeZone(kek.Rusty, bankTimeDelta); + kek.Linus = convertTimeZone(kek.Linus, bankTimeDelta); console.info(kek); } /** @@ -131,9 +120,9 @@ function findRoberyTime(schedule, duration, workingHours) { * @returns {Object} */ function getAppropriateMoment(schedule, duration, workingHours) { - console.info(schedule, duration, workingHours); - let kek = clone(schedule); - findRoberyTime(kek, duration, workingHours); + //console.info(schedule, duration, workingHours); + + findRoberyTime(schedule, duration, workingHours); return { /** * Найдено ли время From 6462bc05abbbc0f1b5708b214c0be29b9adf6af9 Mon Sep 17 00:00:00 2001 From: simple_man Date: Sun, 11 Nov 2018 23:07:39 +0500 Subject: [PATCH 06/17] kekekeke --- robbery.js | 45 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 0d2b2db..abb3add 100755 --- a/robbery.js +++ b/robbery.js @@ -102,6 +102,34 @@ function convertOccupiedSchedule(scheduleMan) { return scheduleMan; } +function fillTheDay(day, from, to, start, end, obj) { + if (getDayFromStr(from) === day) { + let num = parseInt(from.substring(3,from.length)); + if (num > start && num < end) { + obj.first = start; + obj.firstDelta = num - start; + } + if (getDayFromStr(to) === day) { + let num = parseInt(to.substring(3,to.length)); + if (num > start && num < end) { + obj.second = num; + obj.secondDelta = end - num; + } + } + } + + return obj; +} + +function fiilTheManProperties(man, array, start, end) { + for (let i = 0; i Date: Sun, 11 Nov 2018 23:40:51 +0500 Subject: [PATCH 07/17] lola --- robbery.js | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index abb3add..53895e0 100755 --- a/robbery.js +++ b/robbery.js @@ -130,6 +130,18 @@ function fiilTheManProperties(man, array, start, end) { return man; } +function filMiniMap(d, miniMap, day) { + if (d.firstDelta < miniMap[day].firstDelta) { + miniMap[day].firstDelta = d.firstDelta; + miniMap[day].first = d.first; + } + if (d.secondDelta < miniMap[day].secondDelta) { + miniMap[day].secondDelta = d.secondDelta; + miniMap[day].second = d.second; + } + return miniMap; +} + function findRoberyTime(schedule, duration, workingHours) { const bankTimeDelta = getDeltaTime(workingHours.from); var kek = JSON.stringify(schedule); @@ -152,7 +164,48 @@ function findRoberyTime(schedule, duration, workingHours) { wednesday:{} }; dannyMap = fiilTheManProperties(dannyMap, kek.Danny, start, end); - console.info(dannyMap); + let rustyMap = { + monday:{}, + tuesday:{}, + wednesday:{} + }; + rustyMap = fiilTheManProperties(rustyMap, kek.Rusty, start, end); + let linusMap = { + monday:{}, + tuesday:{}, + wednesday:{} + }; + linusMap = fiilTheManProperties(dannyMap, kek.Linus, start, end); + let miniMap = { + monday:{ + first: 1440, + second: 1440, + firstDelta: 1440, + secondDelta: 1440 + }, + tuesday:{ + first: 1440, + second: 1440, + firstDelta: 1440, + secondDelta: 1440 + }, + wednesday:{ + first: 1440, + second: 1440, + firstDelta: 1440, + secondDelta: 1440 + } + }; + miniMap = filMiniMap(dannyMap.monday, miniMap, 'monday'); + miniMap = filMiniMap(dannyMap.tuesday, miniMap, 'tuesday'); + miniMap = filMiniMap(dannyMap.wednesday, miniMap, 'wednesday'); + miniMap = filMiniMap(rustyMap.monday, miniMap, 'monday'); + miniMap = filMiniMap(rustyMap.tuesday, miniMap, 'tuesday'); + miniMap = filMiniMap(rustyMap.wednesday, miniMap, 'wednesday'); + miniMap = filMiniMap(linusMap.monday, miniMap, 'monday'); + miniMap = filMiniMap(linusMap.tuesday, miniMap, 'tuesday'); + miniMap = filMiniMap(linusMap.wednesday, miniMap, 'wednesday'); + console.info(miniMap); } /** * @param {Object} schedule – Расписание Банды From ac240114cca73c8575251f9ff32c46d2c73b020c Mon Sep 17 00:00:00 2001 From: simple_man Date: Sun, 11 Nov 2018 23:57:22 +0500 Subject: [PATCH 08/17] ploho --- robbery.js | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index 53895e0..e1448b5 100755 --- a/robbery.js +++ b/robbery.js @@ -205,7 +205,33 @@ function findRoberyTime(schedule, duration, workingHours) { miniMap = filMiniMap(linusMap.monday, miniMap, 'monday'); miniMap = filMiniMap(linusMap.tuesday, miniMap, 'tuesday'); miniMap = filMiniMap(linusMap.wednesday, miniMap, 'wednesday'); - console.info(miniMap); + let time = -1; + let day = 's'; + if (miniMap.monday.firstDelta >= duration) { + time = miniMap.monday.first; + day = 'ПН'; + } + if (miniMap.monday.secondDelta >= duration) { + time = miniMap.monday.second; + day = 'ПН'; + } + if (miniMap.tuesday.firstDelta >= duration) { + time = miniMap.tuesday.first; + day = 'ВТ'; + } + if (miniMap.tuesday.secondDelta >= duration) { + time = miniMap.tuesday.second; + day = 'ВТ'; + } + if (miniMap.wednesday.firstDelta >= duration) { + time = miniMap.wednesday.first; + day = 'СР'; + } + if (miniMap.wednesday.secondDelta >= duration) { + time = miniMap.wednesday.second; + day = 'СР'; + } + console.info(day + " " + time); } /** * @param {Object} schedule – Расписание Банды From 0f9c7459d53ce9923155a777912e1bb0ab798165 Mon Sep 17 00:00:00 2001 From: simple_man Date: Sun, 18 Nov 2018 22:46:05 +0500 Subject: [PATCH 09/17] =?UTF-8?q?=D1=8D=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 173 ++++++++++++++++++++--------------------------------- 1 file changed, 66 insertions(+), 107 deletions(-) diff --git a/robbery.js b/robbery.js index e1448b5..b7dcea5 100755 --- a/robbery.js +++ b/robbery.js @@ -102,44 +102,35 @@ function convertOccupiedSchedule(scheduleMan) { return scheduleMan; } -function fillTheDay(day, from, to, start, end, obj) { - if (getDayFromStr(from) === day) { - let num = parseInt(from.substring(3,from.length)); - if (num > start && num < end) { - obj.first = start; - obj.firstDelta = num - start; - } - if (getDayFromStr(to) === day) { - let num = parseInt(to.substring(3,to.length)); - if (num > start && num < end) { - obj.second = num; - obj.secondDelta = end - num; +function fillTheDayArray(man, dayArr, dayStr) { + for (let property of man) { + let from = property.from; + let to = property.to; + if (getDayFromStr(from) === dayStr) { + if (getDayFromStr(to) === dayStr) { + let start = from.substring(3, from.length); + let end = to.substring(3, to.length); + for (let i = start; i <= end; i++) { + dayArr[i]--; + } + } else { + let start = from.substring(3, from.length); + for (let i = start; i <= 1440; i++) { + dayArr[i]--; + } } } } - - return obj; -} - -function fiilTheManProperties(man, array, start, end) { - for (let i = 0; i= duration) { - time = miniMap.monday.first; - day = 'ПН'; - } - if (miniMap.monday.secondDelta >= duration) { - time = miniMap.monday.second; - day = 'ПН'; + let monday = []; + let tuesday = []; + let wednesday = []; + for (let i = 0; i < 1440; i++) { + monday.push(3); + } + for (let i = 0; i < 1440; i++) { + tuesday.push(3); + } + for (let i = 0; i < 1440; i++) { + wednesday.push(3) + } + fillTheDayArray(kek.Danny, monday, 'ПН'); + fillTheDayArray(kek.Rusty, monday, 'ПН'); + fillTheDayArray(kek.Linus, monday, 'ПН'); + fillTheDayArray(kek.Danny, tuesday, 'ВТ'); + fillTheDayArray(kek.Rusty, tuesday, 'ВТ'); + fillTheDayArray(kek.Linus, tuesday, 'ВТ'); + fillTheDayArray(kek.Danny, wednesday, 'СР'); + fillTheDayArray(kek.Rusty, wednesday, 'СР'); + fillTheDayArray(kek.Linus, wednesday, 'СР'); + + let fromStr = workingHours.from; + let toStr = workingHours.to; + let fromHour = getHoursFromStr(fromStr); + let toHour = getHoursFromStr(toStr); + let fromMinutes = getMinutesFromStr(fromStr); + let toMinutes = getMinutesFromStr(toStr); + let startTime = fromHour*60 + fromMinutes; + let endTime = toHour*60 + toMinutes; + + for (let i = startTime; i <= endTime; i++) { + monday[i]++; } - if (miniMap.tuesday.firstDelta >= duration) { - time = miniMap.tuesday.first; - day = 'ВТ'; + for (let i = startTime; i <= endTime; i++) { + tuesday[i]++; } - if (miniMap.tuesday.secondDelta >= duration) { - time = miniMap.tuesday.second; - day = 'ВТ'; + for (let i = startTime; i <= endTime; i++) { + wednesday[i]++; } - if (miniMap.wednesday.firstDelta >= duration) { - time = miniMap.wednesday.first; - day = 'СР'; + let answer = findTimeEnd(monday, 'ПН', duration); + if (answer === 'kek') { + answer = findTimeEnd(tuesday, 'ВТ', duration); } - if (miniMap.wednesday.secondDelta >= duration) { - time = miniMap.wednesday.second; - day = 'СР'; + if (answer === 'kek') { + answer = findTimeEnd(wednesday, 'СР', duration); } - console.info(day + " " + time); + console.info(answer); } /** * @param {Object} schedule – Расписание Банды From acd2e2fa59bb456170bd3c6203ae6f886416dd54 Mon Sep 17 00:00:00 2001 From: Tassadar2499 <34176883+Tassadar2499@users.noreply.github.com> Date: Tue, 11 Dec 2018 17:12:53 +0500 Subject: [PATCH 10/17] =?UTF-8?q?=D0=BE=D1=82=20=D0=B4=D1=83=D1=88=D0=B8?= =?UTF-8?q?=20=D0=BF=D1=80=D1=8F=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 135 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 96 insertions(+), 39 deletions(-) diff --git a/robbery.js b/robbery.js index b7dcea5..62d5223 100755 --- a/robbery.js +++ b/robbery.js @@ -7,6 +7,7 @@ const isStar = false; const DAYS_KEYS= { 'ПН': 0, 'ВТ': 1, 'СР': 2, 'ЧТ': 3, 'ПТ': 4, 'СБ': 5, 'ВС': 6 }; const NUMBER_KEYS = { 0: 'ПН', 1: 'ВТ', 2: 'СР', 3: 'ЧТ', 4: 'ПТ', 5: 'СБ', 6: 'ВС' }; +const minutesInDay = 24*60; function getDeltaTime(str) { return parseInt(str.match(/[+]\d+/).toString().substr(1)); @@ -51,57 +52,66 @@ function caseMinusDeltaTime(time, day, delta) { return day + " " + time; } -function convertTimeZone(manSchedule, bankTimeDelta) { +function convertTimeZone(manSchedule, bankTimeDelta) { //Привести к одному часовому поясу let deltaMan = getDeltaTime(manSchedule[0].from); - if (deltaMan == bankTimeDelta) { - for (let i = 0; i < manSchedule.length; i++) { - let fromStr = manSchedule[i].from; - let toStr = manSchedule[i].to; - manSchedule[i].from = getDayFromStr(fromStr) + ' ' + getHoursFromStr(fromStr) + ':' + getMinutesFromStr(fromStr) + '+' + bankTimeDelta; - manSchedule[i].to = getDayFromStr(toStr) + ' ' + getHoursFromStr(toStr) + ':' + getMinutesFromStr(toStr) + '+' + bankTimeDelta; + let result = []; + let delta = bankTimeDelta - deltaMan; + for (let i = 0; i < manSchedule.length; i++) { + let fromStr = manSchedule[i].from; + let toStr = manSchedule[i].to; + + let fromStrEnd = ':' + getMinutesFromStr(fromStr) + '+' + bankTimeDelta; + let toStrEnd = ':' + getMinutesFromStr(toStr) + '+' + bankTimeDelta; + let hoursStrFrom = getHoursFromStr(fromStr); + let dayStrFrom = getDayFromStr(fromStr); + let hoursStrTo = getHoursFromStr(toStr); + let dayStrTo = getDayFromStr(toStr); + let param = {from: "", to: ""}; + if (deltaMan < bankTimeDelta) { + param.from = casePlusDeltaTime(hoursStrFrom, dayStrFrom, delta) + fromStrEnd; + param.to = casePlusDeltaTime(hoursStrTo, dayStrTo, delta) + toStrEnd; } - return manSchedule; - } - if (deltaMan < bankTimeDelta) { - let delta = bankTimeDelta - deltaMan; - for (let i = 0; i < manSchedule.length; i++) { - let fromStr = manSchedule[i].from; - let toStr = manSchedule[i].to; - manSchedule[i].from = casePlusDeltaTime(getHoursFromStr(fromStr), getDayFromStr(fromStr), delta) + ':' + getMinutesFromStr(fromStr) + '+' + bankTimeDelta; - manSchedule[i].to = casePlusDeltaTime(getHoursFromStr(toStr), getDayFromStr(toStr), delta) + ':' + getMinutesFromStr(toStr) + '+' + bankTimeDelta; + else if (deltaMan == bankTimeDelta) { + param.from = dayStrFrom + ' ' + hoursStrFrom + fromStrEnd; + param.to = dayStrTo + ' ' + hoursStrTo + toStrEnd; } - return manSchedule; - } - if (deltaMan > bankTimeDelta) { - let delta = deltaMan - bankTimeDelta; - for (let i = 0; i < manSchedule.length; i++) { - let fromStr = manSchedule[i].from; - let toStr = manSchedule[i].to; - manSchedule[i].from = caseMinusDeltaTime(getHoursFromStr(fromStr), getDayFromStr(fromStr), delta) + ':' + getMinutesFromStr(fromStr) + '+' + bankTimeDelta; - manSchedule[i].to = caseMinusDeltaTime(getHoursFromStr(toStr), getDayFromStr(toStr), delta) + ':' + getMinutesFromStr(toStr) + '+' + bankTimeDelta; + else if (deltaMan > bankTimeDelta) { + param.from = caseMinusDeltaTime(hoursStrFrom, dayStrFrom, delta) + + fromStrEnd; + param.to = caseMinusDeltaTime(hoursStrTo, dayStrTo, delta) + toStrEnd; } - return manSchedule; + result.push(param); } + + return result; } -function convertOccupiedSchedule(scheduleMan) { +function convertOccupiedSchedule(scheduleMan) { //Привести к минутам for (let i = 0; i < scheduleMan.length; i++) { let fromStr = scheduleMan[i].from; let toStr = scheduleMan[i].to; - let fromDay = getDayFromStr(fromStr); - let toDay = getDayFromStr(toStr); - let fromHour = getHoursFromStr(fromStr); - let toHour = getHoursFromStr(toStr); - let fromMinutes = getMinutesFromStr(fromStr); - let toMinutes = getMinutesFromStr(toStr); - let fromTime = fromHour*60 + fromMinutes; - let toTime = toHour*60 + toMinutes; - scheduleMan[i].from = fromDay + ' ' + fromTime; - scheduleMan[i].to = toDay + ' ' + toTime; + scheduleMan[i].from = getDayFromStr(fromStr) + ' ' + getHoursFromStr(fromStr)*60 + getMinutesFromStr(fromStr); + scheduleMan[i].to = getDayFromStr(toStr) + ' ' + getHoursFromStr(toStr)*60 + getMinutesFromStr(toStr); } return scheduleMan; } +<<<<<<< HEAD +class DeltaTime { + constructor(from, to) { + this.from = from; + this.to = to; + } +} + +function calculateTime(str) { + let minute = parseInt(str.match(/\d+/).toString()); + return DAYS_KEYS[getDayFromStr(str)] * minutesInDay + minute; +} + +function convertToDeltaTime(man) { + console.info(man); + return new DeltaTime(calculateTime(man.from), calculateTime(man.to)); +======= function fillTheDayArray(man, dayArr, dayStr) { for (let property of man) { let from = property.from; @@ -131,18 +141,64 @@ function findTimeEnd(dayArray, dayStr, duration) { } } return 'kek'; +>>>>>>> 0f9c7459d53ce9923155a777912e1bb0ab798165 } function findRoberyTime(schedule, duration, workingHours) { + let intervals = []; const bankTimeDelta = getDeltaTime(workingHours.from); - var kek = JSON.stringify(schedule); - kek = JSON.parse(kek); + for (let human in schedule) { + let humanSchedule = convertTimeZone(schedule[human], bankTimeDelta); + humanSchedule = convertOccupiedSchedule(humanSchedule); + //console.info(humanSchedule); + for (let param of humanSchedule) { + intervals.push(convertToDeltaTime(param)); + } + } + console.info(intervals); + /*console.info(arrayOfMen); kek.Danny = convertTimeZone(kek.Danny, bankTimeDelta); kek.Rusty = convertTimeZone(kek.Rusty, bankTimeDelta); kek.Linus = convertTimeZone(kek.Linus, bankTimeDelta); kek.Danny = convertOccupiedSchedule(kek.Danny); kek.Rusty = convertOccupiedSchedule(kek.Rusty); kek.Linus = convertOccupiedSchedule(kek.Linus); +<<<<<<< HEAD + console.info(kek); + arrayOfMen.push(convertToDeltaTime(kek.Danny)); + arrayOfMen.push(convertToDeltaTime(kek.Rusty)); + arrayOfMen.push(convertToDeltaTime(kek.Linus));*/ + + /*var bankMinutes = convertOccupiedSchedule(workingHours); + var array = [minutesInDay*3]; + for (let i = 0; i < array.length; i++) { + array[i] = 3; + } + for (let i = getMinutesFromStr(bankMinutes.from); i < getMinutesFromStr(bankMinutes.to); i++) { + array[i]++; + } + for (let men in kek) { + for (let param of men) { + let from = param.from; + let to = param.to; + console.info(men); + let indexFrom = DAYS_KEYS(getDayFromStr(from)); + let indexTo = DAYS_KEYS(getDayFromStr(to)); + let start = indexFrom * minutesInDay + getMinutesFromStr(from); + let end = indexTo * minutesInDay + getMinutesFromStr(to); + for (let i = start; i < end; i++) { + array[i]--; + } + } + } + var count = 0; + for (let i = 0; i < array.length; i++) { + if(array[i] == 4) + count++; + else if (count >= workingHours) + console.info(i); + }*/ +======= let monday = []; let tuesday = []; let wednesday = []; @@ -191,6 +247,7 @@ function findRoberyTime(schedule, duration, workingHours) { answer = findTimeEnd(wednesday, 'СР', duration); } console.info(answer); +>>>>>>> 0f9c7459d53ce9923155a777912e1bb0ab798165 } /** * @param {Object} schedule – Расписание Банды From 9eae7dd6f292cf9c5eba5692a38ad42c85b0089f Mon Sep 17 00:00:00 2001 From: Tassadar2499 <34176883+Tassadar2499@users.noreply.github.com> Date: Tue, 11 Dec 2018 17:52:30 +0500 Subject: [PATCH 11/17] =?UTF-8?q?=D0=BE=D1=82=20=D0=B4=D1=83=D1=88=D0=B8?= =?UTF-8?q?=20=D0=BE=D1=82=D1=80=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robbery.js | 229 ++++++----------------------------------------------- 1 file changed, 24 insertions(+), 205 deletions(-) diff --git a/robbery.js b/robbery.js index 62d5223..0a563f0 100755 --- a/robbery.js +++ b/robbery.js @@ -7,9 +7,11 @@ const isStar = false; const DAYS_KEYS= { 'ПН': 0, 'ВТ': 1, 'СР': 2, 'ЧТ': 3, 'ПТ': 4, 'СБ': 5, 'ВС': 6 }; const NUMBER_KEYS = { 0: 'ПН', 1: 'ВТ', 2: 'СР', 3: 'ЧТ', 4: 'ПТ', 5: 'СБ', 6: 'ВС' }; -const minutesInDay = 24*60; +const hoursInDays = 24; +const minutesInHour = 60; +const minutesInDay = hoursInDays * minutesInHour; -function getDeltaTime(str) { +function getTimeZone(str) { return parseInt(str.match(/[+]\d+/).toString().substr(1)); } @@ -27,75 +29,24 @@ function getMinutesFromStr(str) { return parseInt(minute.substr(1)); } -function casePlusDeltaTime(time, day, delta) { - if (time + delta >= 24) { - time = time + delta - 24; - let temp = DAYS_KEYS[day]; - temp = (temp == 6) ? 0 : temp++; - day = NUMBER_KEYS[temp]; - } else { - time = time + delta; +class Time { + constructor(currentString) { + this.currentString = currentString; + this.day = getDayFromStr(currentString); + this.dayIndex = DAYS_KEYS[this.day]; + this.hours = getHoursFromStr(currentString); + this.minutes = getMinutesFromStr(currentString); + this.delta = getTimeZone(currentString); } - return day + " " + time; -} - -function caseMinusDeltaTime(time, day, delta) { - if (time - delta < 0) { - let kek = delta - time; - time = 24 - kek; - let temp = DAYS_KEYS[day]; - temp = (temp == 0) ? 6 : temp--; - day = NUMBER_KEYS[temp]; - } else { - time = time - delta; - } - return day + " " + time; -} - -function convertTimeZone(manSchedule, bankTimeDelta) { //Привести к одному часовому поясу - let deltaMan = getDeltaTime(manSchedule[0].from); - let result = []; - let delta = bankTimeDelta - deltaMan; - for (let i = 0; i < manSchedule.length; i++) { - let fromStr = manSchedule[i].from; - let toStr = manSchedule[i].to; - let fromStrEnd = ':' + getMinutesFromStr(fromStr) + '+' + bankTimeDelta; - let toStrEnd = ':' + getMinutesFromStr(toStr) + '+' + bankTimeDelta; - let hoursStrFrom = getHoursFromStr(fromStr); - let dayStrFrom = getDayFromStr(fromStr); - let hoursStrTo = getHoursFromStr(toStr); - let dayStrTo = getDayFromStr(toStr); - let param = {from: "", to: ""}; - if (deltaMan < bankTimeDelta) { - param.from = casePlusDeltaTime(hoursStrFrom, dayStrFrom, delta) + fromStrEnd; - param.to = casePlusDeltaTime(hoursStrTo, dayStrTo, delta) + toStrEnd; - } - else if (deltaMan == bankTimeDelta) { - param.from = dayStrFrom + ' ' + hoursStrFrom + fromStrEnd; - param.to = dayStrTo + ' ' + hoursStrTo + toStrEnd; - } - else if (deltaMan > bankTimeDelta) { - param.from = caseMinusDeltaTime(hoursStrFrom, dayStrFrom, delta) + + fromStrEnd; - param.to = caseMinusDeltaTime(hoursStrTo, dayStrTo, delta) + toStrEnd; - } - result.push(param); + convertStringToMinutes(bankTimeZone) { + return this.dayIndex * minutesInDay + + this.hours * minutesInHour + + this.minutes + + (bankTimeZone - this.delta) * minutesInHour; } - - return result; } -function convertOccupiedSchedule(scheduleMan) { //Привести к минутам - for (let i = 0; i < scheduleMan.length; i++) { - let fromStr = scheduleMan[i].from; - let toStr = scheduleMan[i].to; - scheduleMan[i].from = getDayFromStr(fromStr) + ' ' + getHoursFromStr(fromStr)*60 + getMinutesFromStr(fromStr); - scheduleMan[i].to = getDayFromStr(toStr) + ' ' + getHoursFromStr(toStr)*60 + getMinutesFromStr(toStr); - } - return scheduleMan; -} - -<<<<<<< HEAD class DeltaTime { constructor(from, to) { this.from = from; @@ -103,151 +54,19 @@ class DeltaTime { } } -function calculateTime(str) { - let minute = parseInt(str.match(/\d+/).toString()); - return DAYS_KEYS[getDayFromStr(str)] * minutesInDay + minute; -} - -function convertToDeltaTime(man) { - console.info(man); - return new DeltaTime(calculateTime(man.from), calculateTime(man.to)); -======= -function fillTheDayArray(man, dayArr, dayStr) { - for (let property of man) { - let from = property.from; - let to = property.to; - if (getDayFromStr(from) === dayStr) { - if (getDayFromStr(to) === dayStr) { - let start = from.substring(3, from.length); - let end = to.substring(3, to.length); - for (let i = start; i <= end; i++) { - dayArr[i]--; - } - } else { - let start = from.substring(3, from.length); - for (let i = start; i <= 1440; i++) { - dayArr[i]--; - } - } - } - } -} - -function findTimeEnd(dayArray, dayStr, duration) { - for (let i = 0; i < dayArray.length; i++) { - let flag = true; - if (dayArray[i] === 4 && dayArray[i + duration] === 4) { - return i + ' ' + dayStr; - } - } - return 'kek'; ->>>>>>> 0f9c7459d53ce9923155a777912e1bb0ab798165 -} - function findRoberyTime(schedule, duration, workingHours) { let intervals = []; - const bankTimeDelta = getDeltaTime(workingHours.from); + const bankTimeZone = getTimeZone(workingHours.from); for (let human in schedule) { - let humanSchedule = convertTimeZone(schedule[human], bankTimeDelta); - humanSchedule = convertOccupiedSchedule(humanSchedule); - //console.info(humanSchedule); - for (let param of humanSchedule) { - intervals.push(convertToDeltaTime(param)); + for (let param of schedule[human]) { + console.info(param); + let timeFrom = (new Time(param.from)).convertStringToMinutes(bankTimeZone); + let timeTo = (new Time(param.to)).convertStringToMinutes(bankTimeZone); + let deltaTime = new DeltaTime(timeFrom, timeTo); + intervals.push(deltaTime); } } console.info(intervals); - /*console.info(arrayOfMen); - kek.Danny = convertTimeZone(kek.Danny, bankTimeDelta); - kek.Rusty = convertTimeZone(kek.Rusty, bankTimeDelta); - kek.Linus = convertTimeZone(kek.Linus, bankTimeDelta); - kek.Danny = convertOccupiedSchedule(kek.Danny); - kek.Rusty = convertOccupiedSchedule(kek.Rusty); - kek.Linus = convertOccupiedSchedule(kek.Linus); -<<<<<<< HEAD - console.info(kek); - arrayOfMen.push(convertToDeltaTime(kek.Danny)); - arrayOfMen.push(convertToDeltaTime(kek.Rusty)); - arrayOfMen.push(convertToDeltaTime(kek.Linus));*/ - - /*var bankMinutes = convertOccupiedSchedule(workingHours); - var array = [minutesInDay*3]; - for (let i = 0; i < array.length; i++) { - array[i] = 3; - } - for (let i = getMinutesFromStr(bankMinutes.from); i < getMinutesFromStr(bankMinutes.to); i++) { - array[i]++; - } - for (let men in kek) { - for (let param of men) { - let from = param.from; - let to = param.to; - console.info(men); - let indexFrom = DAYS_KEYS(getDayFromStr(from)); - let indexTo = DAYS_KEYS(getDayFromStr(to)); - let start = indexFrom * minutesInDay + getMinutesFromStr(from); - let end = indexTo * minutesInDay + getMinutesFromStr(to); - for (let i = start; i < end; i++) { - array[i]--; - } - } - } - var count = 0; - for (let i = 0; i < array.length; i++) { - if(array[i] == 4) - count++; - else if (count >= workingHours) - console.info(i); - }*/ -======= - let monday = []; - let tuesday = []; - let wednesday = []; - for (let i = 0; i < 1440; i++) { - monday.push(3); - } - for (let i = 0; i < 1440; i++) { - tuesday.push(3); - } - for (let i = 0; i < 1440; i++) { - wednesday.push(3) - } - fillTheDayArray(kek.Danny, monday, 'ПН'); - fillTheDayArray(kek.Rusty, monday, 'ПН'); - fillTheDayArray(kek.Linus, monday, 'ПН'); - fillTheDayArray(kek.Danny, tuesday, 'ВТ'); - fillTheDayArray(kek.Rusty, tuesday, 'ВТ'); - fillTheDayArray(kek.Linus, tuesday, 'ВТ'); - fillTheDayArray(kek.Danny, wednesday, 'СР'); - fillTheDayArray(kek.Rusty, wednesday, 'СР'); - fillTheDayArray(kek.Linus, wednesday, 'СР'); - - let fromStr = workingHours.from; - let toStr = workingHours.to; - let fromHour = getHoursFromStr(fromStr); - let toHour = getHoursFromStr(toStr); - let fromMinutes = getMinutesFromStr(fromStr); - let toMinutes = getMinutesFromStr(toStr); - let startTime = fromHour*60 + fromMinutes; - let endTime = toHour*60 + toMinutes; - - for (let i = startTime; i <= endTime; i++) { - monday[i]++; - } - for (let i = startTime; i <= endTime; i++) { - tuesday[i]++; - } - for (let i = startTime; i <= endTime; i++) { - wednesday[i]++; - } - let answer = findTimeEnd(monday, 'ПН', duration); - if (answer === 'kek') { - answer = findTimeEnd(tuesday, 'ВТ', duration); - } - if (answer === 'kek') { - answer = findTimeEnd(wednesday, 'СР', duration); - } - console.info(answer); ->>>>>>> 0f9c7459d53ce9923155a777912e1bb0ab798165 } /** * @param {Object} schedule – Расписание Банды From 6baed2c1267fd63fdb5b3066d3daa25f407577ee Mon Sep 17 00:00:00 2001 From: simple_man Date: Wed, 12 Dec 2018 22:02:50 +0500 Subject: [PATCH 12/17] vse aaaaaaaa --- robbery.js | 171 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 140 insertions(+), 31 deletions(-) diff --git a/robbery.js b/robbery.js index 0a563f0..ae822e9 100755 --- a/robbery.js +++ b/robbery.js @@ -1,5 +1,5 @@ 'use strict'; - + /** * Сделано задание на звездочку * Реализовано оба метода и tryLater @@ -7,28 +7,80 @@ const isStar = false; const DAYS_KEYS= { 'ПН': 0, 'ВТ': 1, 'СР': 2, 'ЧТ': 3, 'ПТ': 4, 'СБ': 5, 'ВС': 6 }; const NUMBER_KEYS = { 0: 'ПН', 1: 'ВТ', 2: 'СР', 3: 'ЧТ', 4: 'ПТ', 5: 'СБ', 6: 'ВС' }; -const hoursInDays = 24; -const minutesInHour = 60; -const minutesInDay = hoursInDays * minutesInHour; - +const HOURS_IN_DAYS = 24; +const MINUTES_IN_HOUR = 60; +const MINUTES_IN_DAY = HOURS_IN_DAYS * MINUTES_IN_HOUR; + function getTimeZone(str) { return parseInt(str.match(/[+]\d+/).toString().substr(1)); } - + function getHoursFromStr(str) { let hour = str.match(/\d+:/).toString(); return parseInt(hour.substring(0,hour.length-1)); } - + function getDayFromStr(str) { - return str.match(/[А-Я]{2}/).toString(); + let day = str.match(/[А-Я]{2}/); + if (day === null) + return NUMBER_KEYS[0]; + + return day.toString(); } - + function getMinutesFromStr(str) { let minute = str.match(/:\d+/).toString(); return parseInt(minute.substr(1)); } + +function getArrayOfIntervals(freeInterval, interval) { + let intersectLeft = freeInterval.isIntersecPoint(interval.from); + let intersectRight = freeInterval.isIntersecPoint(interval.to); + + /*console.info('rofl'); + console.info(interval); + console.info(freeInterval);*/ + if(intersectLeft && intersectRight) {//([]) + //console.info("right and left"); + return [new Interval(freeInterval.from, interval.from), + new Interval(interval.to, freeInterval.to)]; + } + if(intersectLeft && !intersectRight) {//([)] + //console.info("left"); + return [new Interval(freeInterval.from, interval.from)]; + } + if(!intersectLeft && intersectRight) {//[(]) + //console.info("right"); + return [new Interval(interval.to, freeInterval.to)]; + } + if(freeInterval.isInInterval(interval)) {//[()] + //console.info("full"); + return []; + } + //console.info("none"); + return [freeInterval]; +} + +function calculateInterval(freeIntervals, intervals) { + for (let interval of intervals) { + calculateInversia(freeIntervals, interval); + } +} + +function calculateInversia(freeIntervals, interval) { + //console.info(freeIntervals); + for (let i = 0; i < freeIntervals.length;) { + let temp = getArrayOfIntervals(freeIntervals[i], interval); + //console.info(temp); + freeIntervals.splice(i, 1); + for (let j = 0; j < temp.length; j++) { + freeIntervals.splice(i + j, 0, temp[j]); + } + i += temp.length + 1; + } +} + class Time { constructor(currentString) { this.currentString = currentString; @@ -40,34 +92,86 @@ class Time { } convertStringToMinutes(bankTimeZone) { - return this.dayIndex * minutesInDay - + this.hours * minutesInHour + return this.dayIndex * MINUTES_IN_DAY + + this.hours * MINUTES_IN_HOUR + this.minutes - + (bankTimeZone - this.delta) * minutesInHour; + + (bankTimeZone - this.delta) * MINUTES_IN_HOUR; } } - -class DeltaTime { + +class Interval { constructor(from, to) { this.from = from; this.to = to; } -} -function findRoberyTime(schedule, duration, workingHours) { + isIntersecPoint(point) { + return point >= this.from && point <= this.to; + } + + isInInterval(interval) { + return this.from >= interval.from && this.to <= interval.to; + } +} + +function convertStrToDeltaTime(param, bankTimeZone) { + let timeFrom = (new Time(param.from)).convertStringToMinutes(bankTimeZone); + let timeTo = (new Time(param.to)).convertStringToMinutes(bankTimeZone); + return new Interval(timeFrom, timeTo); +} + +function getIntervalsFromSchedlue(schedule, bankTimeZone) { let intervals = []; - const bankTimeZone = getTimeZone(workingHours.from); for (let human in schedule) { for (let param of schedule[human]) { - console.info(param); - let timeFrom = (new Time(param.from)).convertStringToMinutes(bankTimeZone); - let timeTo = (new Time(param.to)).convertStringToMinutes(bankTimeZone); - let deltaTime = new DeltaTime(timeFrom, timeTo); + let deltaTime = convertStrToDeltaTime(param, bankTimeZone); intervals.push(deltaTime); } } - console.info(intervals); + + return intervals; +} + +function checkFreeIntervals(freeIntervals, duration) { + for (let freeInterval of freeIntervals) { + let delta = freeInterval.to - freeInterval.from; + if (delta >= duration) { + return freeInterval; + } + } + return false; +} + +function findRoberyTime(schedule, duration, workingHours) { + const bankTimeZone = getTimeZone(workingHours.from); + let intervals = getIntervalsFromSchedlue(schedule, bankTimeZone); + let bankInterval = convertStrToDeltaTime(workingHours, bankTimeZone); + let freeIntervals = []; + for (let i = 0; i < 3; i++) { + freeIntervals.push(new Interval(bankInterval.from + i * MINUTES_IN_DAY, bankInterval.to + i * MINUTES_IN_DAY)); + } + //console.info(intervals); + //console.info(freeIntervals); + calculateInterval(freeIntervals, intervals); + //console.info(freeIntervals); + //console.info('roflando'); + //console.info(checkFreeIntervals(freeIntervals, duration)); + return checkFreeIntervals(freeIntervals, duration); } + +function convertToResultAnswer(time, template) { + let dayIndex = Math.floor(time / MINUTES_IN_DAY); + let day = NUMBER_KEYS[dayIndex]; + let hour = Math.floor((time - MINUTES_IN_DAY * dayIndex) / MINUTES_IN_HOUR); + let minutes = time - MINUTES_IN_DAY * dayIndex - hour * MINUTES_IN_HOUR; + minutes = minutes > 10 ? minutes : '0' + minutes.toString(); + template = template + .replace('%DD', day) + .replace('%HH', hour) + .replace('%MM', minutes); + return template; +} + /** * @param {Object} schedule – Расписание Банды * @param {Number} duration - Время на ограбление в минутах @@ -78,17 +182,18 @@ function findRoberyTime(schedule, duration, workingHours) { */ function getAppropriateMoment(schedule, duration, workingHours) { //console.info(schedule, duration, workingHours); - - findRoberyTime(schedule, duration, workingHours); + + let resultOfFunction = findRoberyTime(schedule, duration, workingHours); return { /** * Найдено ли время * @returns {Boolean} */ exists: function () { - return false; + //return false; + return (resultOfFunction) ? true : false; }, - + /** * Возвращает отформатированную строку с часами для ограбления * Например, "Начинаем в %HH:%MM (%DD)" -> "Начинаем в 14:59 (СР)" @@ -96,9 +201,13 @@ function getAppropriateMoment(schedule, duration, workingHours) { * @returns {String} */ format: function (template) { - return template; + if (!resultOfFunction) { + return ''; + } + return convertToResultAnswer(resultOfFunction.from, template); + //return template; }, - + /** * Попробовать найти часы для ограбления позже [*] * @star @@ -109,9 +218,9 @@ function getAppropriateMoment(schedule, duration, workingHours) { } }; } - + module.exports = { getAppropriateMoment, - + isStar -}; +}; \ No newline at end of file From 1e699ff456c694ee271199a985b7217a76cff05b Mon Sep 17 00:00:00 2001 From: simple_man Date: Wed, 12 Dec 2018 22:21:25 +0500 Subject: [PATCH 13/17] litinh --- robbery.js | 159 ++++++++++++++++++++++++++--------------------------- 1 file changed, 78 insertions(+), 81 deletions(-) diff --git a/robbery.js b/robbery.js index ae822e9..43499e3 100755 --- a/robbery.js +++ b/robbery.js @@ -1,78 +1,105 @@ 'use strict'; - + /** * Сделано задание на звездочку * Реализовано оба метода и tryLater */ const isStar = false; -const DAYS_KEYS= { 'ПН': 0, 'ВТ': 1, 'СР': 2, 'ЧТ': 3, 'ПТ': 4, 'СБ': 5, 'ВС': 6 }; +const DAYS_KEYS = { 'ПН': 0, 'ВТ': 1, 'СР': 2, 'ЧТ': 3, 'ПТ': 4, 'СБ': 5, 'ВС': 6 }; const NUMBER_KEYS = { 0: 'ПН', 1: 'ВТ', 2: 'СР', 3: 'ЧТ', 4: 'ПТ', 5: 'СБ', 6: 'ВС' }; const HOURS_IN_DAYS = 24; const MINUTES_IN_HOUR = 60; const MINUTES_IN_DAY = HOURS_IN_DAYS * MINUTES_IN_HOUR; - + +class Time { + constructor(currentString) { + this.currentString = currentString; + this.day = getDayFromStr(currentString); + this.dayIndex = DAYS_KEYS[this.day]; + this.hours = getHoursFromStr(currentString); + this.minutes = getMinutesFromStr(currentString); + this.delta = getTimeZone(currentString); + } + + convertStringToMinutes(bankTimeZone) { + return this.dayIndex * MINUTES_IN_DAY + + this.hours * MINUTES_IN_HOUR + + this.minutes + + (bankTimeZone - this.delta) * MINUTES_IN_HOUR; + } +} + +class Interval { + constructor(from, to) { + this.from = from; + this.to = to; + } + + isIntersecPoint(point) { + return point >= this.from && point <= this.to; + } + + isInInterval(interval) { + return this.from >= interval.from && this.to <= interval.to; + } +} + function getTimeZone(str) { - return parseInt(str.match(/[+]\d+/).toString().substr(1)); + return parseInt(str.match(/[+]\d+/).toString() + .substr(1)); } - + function getHoursFromStr(str) { let hour = str.match(/\d+:/).toString(); - return parseInt(hour.substring(0,hour.length-1)); + + return parseInt(hour.substring(0, hour.length - 1)); } - + function getDayFromStr(str) { let day = str.match(/[А-Я]{2}/); - if (day === null) + if (day === null) { return NUMBER_KEYS[0]; - + } + return day.toString(); } - + function getMinutesFromStr(str) { let minute = str.match(/:\d+/).toString(); + return parseInt(minute.substr(1)); } - + function getArrayOfIntervals(freeInterval, interval) { let intersectLeft = freeInterval.isIntersecPoint(interval.from); let intersectRight = freeInterval.isIntersecPoint(interval.to); - /*console.info('rofl'); - console.info(interval); - console.info(freeInterval);*/ - - if(intersectLeft && intersectRight) {//([]) - //console.info("right and left"); + if (intersectLeft && intersectRight) { return [new Interval(freeInterval.from, interval.from), new Interval(interval.to, freeInterval.to)]; } - if(intersectLeft && !intersectRight) {//([)] - //console.info("left"); + if (intersectLeft && !intersectRight) { return [new Interval(freeInterval.from, interval.from)]; } - if(!intersectLeft && intersectRight) {//[(]) - //console.info("right"); + if (!intersectLeft && intersectRight) { return [new Interval(interval.to, freeInterval.to)]; } - if(freeInterval.isInInterval(interval)) {//[()] - //console.info("full"); + if (freeInterval.isInInterval(interval)) { return []; } - //console.info("none"); + return [freeInterval]; } - + function calculateInterval(freeIntervals, intervals) { for (let interval of intervals) { calculateInversia(freeIntervals, interval); } } - + function calculateInversia(freeIntervals, interval) { - //console.info(freeIntervals); for (let i = 0; i < freeIntervals.length;) { let temp = getArrayOfIntervals(freeIntervals[i], interval); - //console.info(temp); freeIntervals.splice(i, 1); for (let j = 0; j < temp.length; j++) { freeIntervals.splice(i + j, 0, temp[j]); @@ -80,46 +107,14 @@ function calculateInversia(freeIntervals, interval) { i += temp.length + 1; } } - -class Time { - constructor(currentString) { - this.currentString = currentString; - this.day = getDayFromStr(currentString); - this.dayIndex = DAYS_KEYS[this.day]; - this.hours = getHoursFromStr(currentString); - this.minutes = getMinutesFromStr(currentString); - this.delta = getTimeZone(currentString); - } - - convertStringToMinutes(bankTimeZone) { - return this.dayIndex * MINUTES_IN_DAY - + this.hours * MINUTES_IN_HOUR - + this.minutes - + (bankTimeZone - this.delta) * MINUTES_IN_HOUR; - } -} - -class Interval { - constructor(from, to) { - this.from = from; - this.to = to; - } - - isIntersecPoint(point) { - return point >= this.from && point <= this.to; - } - isInInterval(interval) { - return this.from >= interval.from && this.to <= interval.to; - } -} - function convertStrToDeltaTime(param, bankTimeZone) { let timeFrom = (new Time(param.from)).convertStringToMinutes(bankTimeZone); let timeTo = (new Time(param.to)).convertStringToMinutes(bankTimeZone); + return new Interval(timeFrom, timeTo); } - + function getIntervalsFromSchedlue(schedule, bankTimeZone) { let intervals = []; for (let human in schedule) { @@ -128,7 +123,7 @@ function getIntervalsFromSchedlue(schedule, bankTimeZone) { intervals.push(deltaTime); } } - + return intervals; } @@ -139,23 +134,21 @@ function checkFreeIntervals(freeIntervals, duration) { return freeInterval; } } + return false; } - + function findRoberyTime(schedule, duration, workingHours) { const bankTimeZone = getTimeZone(workingHours.from); let intervals = getIntervalsFromSchedlue(schedule, bankTimeZone); - let bankInterval = convertStrToDeltaTime(workingHours, bankTimeZone); + let bankInterval = convertStrToDeltaTime(workingHours, bankTimeZone); let freeIntervals = []; for (let i = 0; i < 3; i++) { - freeIntervals.push(new Interval(bankInterval.from + i * MINUTES_IN_DAY, bankInterval.to + i * MINUTES_IN_DAY)); + freeIntervals.push(new Interval(bankInterval.from + + i * MINUTES_IN_DAY, bankInterval.to + i * MINUTES_IN_DAY)); } - //console.info(intervals); - //console.info(freeIntervals); calculateInterval(freeIntervals, intervals); - //console.info(freeIntervals); - //console.info('roflando'); - //console.info(checkFreeIntervals(freeIntervals, duration)); + return checkFreeIntervals(freeIntervals, duration); } @@ -169,6 +162,7 @@ function convertToResultAnswer(time, template) { .replace('%DD', day) .replace('%HH', hour) .replace('%MM', minutes); + return template; } @@ -181,19 +175,22 @@ function convertToResultAnswer(time, template) { * @returns {Object} */ function getAppropriateMoment(schedule, duration, workingHours) { - //console.info(schedule, duration, workingHours); - let resultOfFunction = findRoberyTime(schedule, duration, workingHours); + return { + /** * Найдено ли время * @returns {Boolean} */ exists: function () { - //return false; - return (resultOfFunction) ? true : false; + if (resultOfFunction === false) { + return false; + } + + return true; }, - + /** * Возвращает отформатированную строку с часами для ограбления * Например, "Начинаем в %HH:%MM (%DD)" -> "Начинаем в 14:59 (СР)" @@ -204,10 +201,10 @@ function getAppropriateMoment(schedule, duration, workingHours) { if (!resultOfFunction) { return ''; } + return convertToResultAnswer(resultOfFunction.from, template); - //return template; }, - + /** * Попробовать найти часы для ограбления позже [*] * @star @@ -218,9 +215,9 @@ function getAppropriateMoment(schedule, duration, workingHours) { } }; } - + module.exports = { getAppropriateMoment, - + isStar -}; \ No newline at end of file +}; From b6faacb8b2766d9749f9b17bb61759b2c782166c Mon Sep 17 00:00:00 2001 From: simple_man Date: Wed, 12 Dec 2018 22:31:26 +0500 Subject: [PATCH 14/17] nice rofl --- robbery.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/robbery.js b/robbery.js index 43499e3..aebe431 100755 --- a/robbery.js +++ b/robbery.js @@ -115,12 +115,18 @@ function convertStrToDeltaTime(param, bankTimeZone) { return new Interval(timeFrom, timeTo); } +function niceRofl(obj, intervals, bankTimeZone) { + for (let param of obj) { + let deltaTime = convertStrToDeltaTime(param, bankTimeZone); + intervals.push(deltaTime); + } +} + function getIntervalsFromSchedlue(schedule, bankTimeZone) { let intervals = []; for (let human in schedule) { - for (let param of schedule[human]) { - let deltaTime = convertStrToDeltaTime(param, bankTimeZone); - intervals.push(deltaTime); + if (schedule.hasOwnProperty(human)) { + niceRofl(schedule[human], intervals, bankTimeZone); } } From 2c355421f7cdea409a815f2ebe45f9b4a42fdafb Mon Sep 17 00:00:00 2001 From: simple_man Date: Wed, 12 Dec 2018 22:48:31 +0500 Subject: [PATCH 15/17] e boi --- robbery.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/robbery.js b/robbery.js index aebe431..bd23290 100755 --- a/robbery.js +++ b/robbery.js @@ -74,11 +74,12 @@ function getArrayOfIntervals(freeInterval, interval) { let intersectLeft = freeInterval.isIntersecPoint(interval.from); let intersectRight = freeInterval.isIntersecPoint(interval.to); - if (intersectLeft && intersectRight) { - return [new Interval(freeInterval.from, interval.from), - new Interval(interval.to, freeInterval.to)]; - } - if (intersectLeft && !intersectRight) { + if (intersectLeft) { + if (intersectRight) { + return [new Interval(freeInterval.from, interval.from), + new Interval(interval.to, freeInterval.to)]; + } + return [new Interval(freeInterval.from, interval.from)]; } if (!intersectLeft && intersectRight) { From ae7c66354e8cd4b5d8a74a0d7d781293efd9a2d0 Mon Sep 17 00:00:00 2001 From: simple_man Date: Wed, 12 Dec 2018 22:50:47 +0500 Subject: [PATCH 16/17] keknul --- robbery.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robbery.js b/robbery.js index bd23290..1b61e30 100755 --- a/robbery.js +++ b/robbery.js @@ -105,7 +105,7 @@ function calculateInversia(freeIntervals, interval) { for (let j = 0; j < temp.length; j++) { freeIntervals.splice(i + j, 0, temp[j]); } - i += temp.length + 1; + i += temp.length; } } From 2ef352352e44d49c9d00fcf9978f9f0b15438ac8 Mon Sep 17 00:00:00 2001 From: simple_man Date: Wed, 12 Dec 2018 23:15:57 +0500 Subject: [PATCH 17/17] ??? --- robbery.js | 1 + 1 file changed, 1 insertion(+) diff --git a/robbery.js b/robbery.js index 1b61e30..0da8126 100755 --- a/robbery.js +++ b/robbery.js @@ -153,6 +153,7 @@ function findRoberyTime(schedule, duration, workingHours) { for (let i = 0; i < 3; i++) { freeIntervals.push(new Interval(bankInterval.from + i * MINUTES_IN_DAY, bankInterval.to + i * MINUTES_IN_DAY)); + intervals.push(new Interval(i * MINUTES_IN_DAY, i * MINUTES_IN_DAY)); } calculateInterval(freeIntervals, intervals);