Sobes.tech
Middle

Praktická úloha: daný je zoznam bodov s poľami time a value. Je potrebné identifikovať skupiny bodov s rovnakou hodnotou a ponechať len začiatok a koniec každej skupiny (pre optimalizáciu tvorby lineárneho grafu).

sobes.tech AI

Odpoveď od AI

Для оптимизации построения линейного графика нужно сгруппировать точки по одинаковому значению value и для каждой группы оставить только первую и последнюю точку по времени. Это позволит сократить количество точек без потери формы графика.

Пример решения на JavaScript:

function optimizePoints(points) {
  if (points.length === 0) return [];

  const result = [];
  let start = points[0];
  let prev = points[0];

  for (let i = 1; i < points.length; i++) {
    if (points[i].value !== prev.value) {
      // Конец группы
      result.push(start);
      result.push(prev);
      start = points[i];
    }
    prev = points[i];
  }

  // Добавляем последнюю группу
  result.push(start);
  result.push(prev);

  // Убираем дубликаты, если группа из одной точки
  return result.filter((point, index, arr) => {
    if (index === 0) return true;
    const prevPoint = arr[index - 1];
    return !(point.time === prevPoint.time && point.value === prevPoint.value);
  });
}

// Пример использования:
const data = [
  { time: 1, value: 10 },
  { time: 2, value: 10 },
  { time: 3, value: 15 },
  { time: 4, value: 15 },
  { time: 5, value: 15 },
  { time: 6, value: 10 },
];

console.log(optimizePoints(data));

Этот код проходит по массиву точек, определяет группы с одинаковым value и сохраняет только начало и конец каждой группы.