Advertisement
Lusien_Lashans

rtrtrtrt

Dec 12th, 2018
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 'use strict';
  2.  
  3. /**
  4.  * Сделано задание на звездочку
  5.  * Реализовано оба метода и tryLater
  6.  */
  7. const isStar = false;
  8. const DAYS_KEYS= { 'ПН': 0, 'ВТ': 1, 'СР': 2, 'ЧТ': 3, 'ПТ': 4, 'СБ': 5, 'ВС': 6 };
  9. const NUMBER_KEYS = { 0: 'ПН', 1: 'ВТ', 2: 'СР', 3: 'ЧТ', 4: 'ПТ', 5: 'СБ', 6: 'ВС' };
  10. const hoursInDays = 24;
  11. const minutesInHour = 60;
  12. const minutesInDay = hoursInDays * minutesInHour;
  13.  
  14. function getTimeZone(str) {
  15.     return parseInt(str.match(/[+]\d+/).toString().substr(1));
  16. }
  17.  
  18. function getHoursFromStr(str) {
  19.     let hour = str.match(/\d+:/).toString();
  20.     return parseInt(hour.substring(0,hour.length-1));
  21. }
  22.  
  23. function getDayFromStr(str) {
  24.     let day = str.match(/[А-Я]{2}/);
  25.     if (day === null)
  26.         return NUMBER_KEYS[0];
  27.  
  28.     return day.toString();
  29. }
  30.  
  31. function getMinutesFromStr(str) {
  32.     let minute = str.match(/:\d+/).toString();
  33.     return parseInt(minute.substr(1));
  34. }
  35.  
  36. function spodlivoi(freeInterval, interval) {
  37.  
  38. }
  39.  
  40. function calculateInterval(freeIntervals, intervals) {
  41.     for (let interval of intervals) {
  42.         freeIntervals = calculateInversia(freeIntervals, interval);
  43.     }
  44. }
  45.  
  46. function calculateInversia(freeIntervals, interval) {
  47.     for (let i = 0; i < freeIntervals.length;) {
  48.         let temp = spodlivoi(freeInterval, interval);
  49.         freeIntervals.splice(i, 1, temp);
  50.         i += temp.length;
  51.     }
  52. }
  53.  
  54. class Time {
  55.     constructor(currentString) {
  56.         this.currentString = currentString;
  57.         this.day = getDayFromStr(currentString);
  58.         this.dayIndex = DAYS_KEYS[this.day];
  59.         this.hours = getHoursFromStr(currentString);
  60.         this.minutes = getMinutesFromStr(currentString);
  61.         this.delta = getTimeZone(currentString);
  62.     }
  63.  
  64.     convertStringToMinutes(bankTimeZone) {
  65.         return this.dayIndex * minutesInDay
  66.         + this.hours * minutesInHour
  67.         + this.minutes
  68.         + (bankTimeZone - this.delta) * minutesInHour;
  69.     }
  70. }
  71.  
  72. class Interval {
  73.     constructor(from, to) {
  74.         this.from = from;
  75.         this.to = to;
  76.     }
  77. }
  78.  
  79. function convertStrToDeltaTime(param, bankTimeZone) {
  80.     let timeFrom = (new Time(param.from)).convertStringToMinutes(bankTimeZone);
  81.     let timeTo = (new Time(param.to)).convertStringToMinutes(bankTimeZone);
  82.     return new Interval(timeFrom, timeTo);
  83. }
  84.  
  85. function getIntervalsFromSchedlue(schedule, bankTimeZone) {
  86.     let intervals = [];
  87.     for (let human in schedule) {
  88.         for (let param of schedule[human]) {
  89.             let deltaTime = convertStrToDeltaTime(param, bankTimeZone);
  90.             intervals.push(deltaTime);
  91.         }
  92.     }
  93.  
  94.     return intervals;
  95. }
  96.  
  97. function findRoberyTime(schedule, duration, workingHours) {
  98.     const bankTimeZone = getTimeZone(workingHours.from);
  99.     let intervals = getIntervalsFromSchedlue(schedule, bankTimeZone);
  100.     let bankInterval = convertStrToDeltaTime(workingHours, bankTimeZone);
  101.     console.info(intervals);
  102.     console.info(bankInterval);
  103.  
  104.     let freeIntervals = [];
  105.     for (let i = 0; i < 2; i++) {
  106.         freeIntervals.push(new Interval(bankInterval.from + i * minutesInDay, bankInterval.to + i * minutesInDay));
  107.     }
  108.  
  109.  
  110. }
  111. /**
  112.  * @param {Object} schedule – Расписание Банды
  113.  * @param {Number} duration - Время на ограбление в минутах
  114.  * @param {Object} workingHours – Время работы банка
  115.  * @param {String} workingHours.from – Время открытия, например, "10:00+5"
  116.  * @param {String} workingHours.to – Время закрытия, например, "18:00+5"
  117.  * @returns {Object}
  118.  */
  119. function getAppropriateMoment(schedule, duration, workingHours) {
  120.     //console.info(schedule, duration, workingHours);
  121.    
  122.     findRoberyTime(schedule, duration, workingHours);
  123.     return {
  124.         /**
  125.          * Найдено ли время
  126.          * @returns {Boolean}
  127.          */
  128.         exists: function () {
  129.             return false;
  130.         },
  131.  
  132.         /**
  133.          * Возвращает отформатированную строку с часами для ограбления
  134.          * Например, "Начинаем в %HH:%MM (%DD)" -> "Начинаем в 14:59 (СР)"
  135.          * @param {String} template
  136.          * @returns {String}
  137.          */
  138.         format: function (template) {
  139.             return template;
  140.         },
  141.  
  142.         /**
  143.          * Попробовать найти часы для ограбления позже [*]
  144.          * @star
  145.          * @returns {Boolean}
  146.          */
  147.         tryLater: function () {
  148.             return false;
  149.         }
  150.     };
  151. }
  152.  
  153. module.exports = {
  154.     getAppropriateMoment,
  155.  
  156.     isStar
  157. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement