Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- /**
- * Сделано задание на звездочку
- * Реализовано оба метода и tryLater
- */
- 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;
- 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) {
- 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 spodlivoi(freeInterval, interval) {
- }
- function calculateInterval(freeIntervals, intervals) {
- for (let interval of intervals) {
- freeIntervals = calculateInversia(freeIntervals, interval);
- }
- }
- function calculateInversia(freeIntervals, interval) {
- for (let i = 0; i < freeIntervals.length;) {
- let temp = spodlivoi(freeInterval, interval);
- freeIntervals.splice(i, 1, temp);
- i += temp.length;
- }
- }
- 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 * minutesInDay
- + this.hours * minutesInHour
- + this.minutes
- + (bankTimeZone - this.delta) * minutesInHour;
- }
- }
- class Interval {
- constructor(from, to) {
- this.from = from;
- this.to = 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) {
- for (let param of schedule[human]) {
- let deltaTime = convertStrToDeltaTime(param, bankTimeZone);
- intervals.push(deltaTime);
- }
- }
- return intervals;
- }
- function findRoberyTime(schedule, duration, workingHours) {
- const bankTimeZone = getTimeZone(workingHours.from);
- let intervals = getIntervalsFromSchedlue(schedule, bankTimeZone);
- let bankInterval = convertStrToDeltaTime(workingHours, bankTimeZone);
- console.info(intervals);
- console.info(bankInterval);
- let freeIntervals = [];
- for (let i = 0; i < 2; i++) {
- freeIntervals.push(new Interval(bankInterval.from + i * minutesInDay, bankInterval.to + i * minutesInDay));
- }
- }
- /**
- * @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}
- */
- function getAppropriateMoment(schedule, duration, workingHours) {
- //console.info(schedule, duration, workingHours);
- findRoberyTime(schedule, duration, workingHours);
- 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;
- }
- };
- }
- module.exports = {
- getAppropriateMoment,
- isStar
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement