Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Middle — Senior
13
Маркировка общих участков нескольких наборов отрезков
Компании, где спрашивали:
ED-IT
Условие задачи
Имеются три разных набора отрезков. Нужно определить все участки, где они пересекаются, отметить такие пересечения как отдельные новые отрезки (например, пересечение наборов green и yellow отмечаем как новый отрезок – см. exampleResult4), вырезать их из исходных наборов и вывести последовательность получившихся отрезков в диапазоне от 0 до 100.
// Мнемоники отрезков
const Task4 = () => {
type IMnemo = "green" | "yellow" | "red"
//Тип для отрезка - начало и конец
interface IInterval {
start: number,
end: number
}
type ISourceIntervals = Record<IMnemo, IInterval[]>
//Тип ответа
interface IExpectedResult extends IInterval {
mnemo: IMnemo[],
}
//Исходные отрезки
const sourceData: ISourceIntervals = {
green: [{ start: 0, end: 30 }, { start: 90, end: 100 }],
yellow: [{ start: 20, end: 40 }, { start: 50, end: 70 }],
red: [{ start: 10, end: 50 }, { start: 70, end: 90 }],
}
//Ожидаемый результат
const expectedResult: IExpectedResult[] = [
{ "mnemo": ["green"], start: 0, end: 10 },
{ "mnemo": ["green", "red"], start: 10, end: 20 },
{ "mnemo": ["green", "yellow", "red"], start: 20, end: 30 },
{ "mnemo": ["yellow", "red"], start: 30, end: 40 },
{ "mnemo": ["red"], start: 40, end: 50 },
{ "mnemo": ["yellow"], start: 50, end: 70 },
{ "mnemo": ["red"], start: 70, end: 90 },
{ "mnemo": ["green"], start: 90, end: 100 },
]
// Реализовать внутри этой функции оптимальным способом, перебор исходного массива
// может быть только один! Допускается формирования дополнительных массивов/объектов
const getResult = (sourceIntervals: ISourceIntervals): IExpectedResult[] => {
return expectedResult
}
//Это выведет результат её работы справа
return { expectedResult: expectedResult, result: getResult(sourceData) }
}
//Вспомогательные функции
const showTaskResult =(task: number, taskResult: {result: any, expectedResult: any}) => {
console.log(`---Результат задачи ${task}---`)
console.log('Ожидаемый: ', taskResult.expectedResult)
console.log('Из функции: ', taskResult.result)
console.log('')
}
showTaskResult(4, Task4())