function calculateIntervalNumberAndSumOfDuration(strArr) {
let vacanciesNum = +strArr.shift(); // количество вакансий
let vacanciesTime = strArr; // массив со временем всех вакансий
let arrayList = []; // границы отрезков
if (vacanciesNum === 0) {
return "0 0"; // если нет вакансий выдаём 0
} else {
for (const val of vacanciesTime) {
arrayList.push(
[+val.split(" ")[0], 1],
[+val.split(" ")[1] + 1, -1]
); // добавляем все границы из массива со временем
}
arrayList.sort((a, b) => {
return a[0] - b[0];
}); // сортируем по времени границы отрезков
let count = 0; // считаем повторение вакансии
let intervalAndItsRepetitions = []; // интервалы и сколько раз они повторяются
for (let i = 0; i < arrayList.length - 1; i++) {
let buffer = []; // складываем сюда отрезок, потом обнуляем
count += arrayList[i][1];
if (arrayList[i][1] === 1) {
buffer.push(arrayList[i][0]);
} else {
buffer.push(arrayList[i][0] - 1);
}
if (arrayList[i + 1][1] === 1) {
buffer.push(arrayList[i + 1][0]);
} else {
buffer.push(arrayList[i + 1][0] - 1);
}
intervalAndItsRepetitions.push([buffer, count]); // складываем отрезок и количество его повторений
}
intervalAndItsRepetitions.sort((a, b) => {
return a[1] - b[1];
}); // сортируем intervalAndItsRepetitions по количеству повторений
let maxIntervalAndItsRepetitions = []; // максимальные интервалы и сколько они повторяются
maxIntervalAndItsRepetitions = intervalAndItsRepetitions.filter(
(val) => {
if (
val[1] ===
intervalAndItsRepetitions[
intervalAndItsRepetitions.length - 1
][1]
) {
if (val[0][0] > val[0][1]) {
return false;
}
return true;
}
return false;
}
); //оставляем только максимальные интервалы и убираем интервалы где нач время больше конечного
let intervalCount = maxIntervalAndItsRepetitions.length; // счётчик максимальных интервалов
let intervalTime = 0; // счётчик времени максимальных интервалов
for (const el of maxIntervalAndItsRepetitions) {
intervalTime += el[0][1] - el[0][0] + 1;
}
console.log(maxIntervalAndItsRepetitions);
return intervalCount + " " + intervalTime;
}
}
function calculateIntervalNumberAndSumOfDuration(strArr) {
let vacanciesNum = +strArr.shift(); // количество вакансий
let vacanciesTime = strArr; // массив со временем всех вакансий
let arrayList = []; // границы отрезков
if (vacanciesNum === 0) {
return "0 0"; // если нет вакансий выдаём 0
} else {
for (const el of vacanciesTime) {
arrayList.push(
[+el.split(" ")[0], 1],
[+el.split(" ")[1] + 1, -1]
); // добавляем все границы из массива со временем
}
arrayList.sort((a, b) => {
return a[0] - b[0];
}); // сортируем по X границы отрезков
let intervalCount = 0; // счётчик максимальных интервалов
let intervalTime = 0; // счётчик времени максимальных интервалов
for (let i = 0; i < arrayList.length; i++) {
if (
arrayList[i][1] === 1 &&
arrayList[i + 1][1] === -1
) {
intervalCount++;
intervalTime +=
arrayList[i + 1][0] - arrayList[i][0];
}
} // считаем количество максимальных интервалов и их время
return `${intervalCount} ${intervalTime}`;
}
}
function calculateIntervalNumberAndSumOfDuration(strArr) {
let vacanciesNum = +strArr.shift();
let vacanciesTime = strArr;
if (vacanciesNum === 0) {
return "0 0";
} else {
let allIntervals = [];
for (const el of vacanciesTime) {
for (
let i = +el.split(" ")[0];
i <= +el.split(" ")[1];
i++
) {
for (let j = i; j < +el.split(" ")[1] + 1; j++) {
allIntervals.push(`${i} ${j}`);
}
}
} //Находим все возможные интервалы
allIntervals.sort();
let repeatingIntervals = [];
let countRepeating = 1;
for (let i = 0; i < allIntervals.length; i++) {
if (allIntervals[i] === allIntervals[i + 1]) {
countRepeating++;
continue;
}
repeatingIntervals.push(
`${countRepeating}: ${allIntervals[i]}`
);
countRepeating = 1;
} //Проверяем сколько повторяется каждый интервал
repeatingIntervals.sort();
let maxIntervalsNum = +repeatingIntervals[
repeatingIntervals.length - 1
].split(": ")[0]; //Узнаём максимальное число повторений интервалов
let maxIntervals = repeatingIntervals.filter((val) => {
if (+val.split(": ")[0] !== maxIntervalsNum) {
return false;
}
return true;
}); // Оставляем только максимальные интервалы
let filteredMaxIntervals = maxIntervals.filter(
(val1, i) => {
for (const val2 of maxIntervals) {
let startTime1 = +val1
.split(": ")[1]
.split(" ")[0],
endTime1 = +val1.split(": ")[1].split(" ")[1],
startTime2 = +val2.split(": ")[1].split(" ")[0],
endTime2 = +val2.split(": ")[1].split(" ")[1];
if (
(startTime2 <= startTime1 &&
endTime2 > endTime1) ||
(startTime2 < startTime1 &&
endTime2 >= endTime1)
) {
return false;
}
}
return true;
}
); // Убираем все входящие интервалы
let filteredIntervalsNum = filteredMaxIntervals.length; // количество максимальных интервалов
let filteredIntervalsDurationSum = filteredMaxIntervals.reduce(
(prev, cur) => {
prev +=
+cur.split(": ")[1].split(" ")[1] -
+cur.split(": ")[1].split(" ")[0] +
1;
return prev;
},
0
); // длина максимальных интервалов
return `${filteredIntervalsNum} ${filteredIntervalsDurationSum}`;
}
}
function isConvertible(str) {
let str1 = str.split(" ")[0],
str2 = str.split(" ")[1];
const map = new Map(),
set = new Set();
if (str1 === str2) {
return 1;
}
if (str1.length !== str2.length) {
return 0;
}
for (let i = 0; i < str1.length; i++) {
if (!map.has(str1[i])) {
map.set(str1[i], str2[i]);
} else {
if (map.get(str1[i]) !== str2[i]) {
return 0;
}
}
set.add(str2[i]);
}
if (set.size === 33) {
return 0;
}
return 1;
}
const map1 = new Map(),
map2 = new Map();
for (let i = 0; i < modifiableStr.length; i++) {
if (
(map1.has(modifiableStr[i]) &&
map1.get(modifiableStr[i]) !== modifierStr[i]) ||
(map2.has(modifierStr[i]) &&
map2.get(modifierStr[i]) !== modifiableStr[i])
) {
return 0;
}
map1.set(modifiableStr[i], modifierStr[i]);
map2.set(modifierStr[i], modifiableStr[i]);
}