Sobes.tech
Middle

Tarefa prática: dado um array de pontos com campos time e value. É necessário identificar grupos de pontos com o mesmo value e deixar apenas o início e o fim de cada grupo (para otimizar a construção de um gráfico linear).

sobes.tech IA

Resposta da IA

Для оптимизации построения линейного графика нужно сгруппировать точки по одинаковому значению 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 и сохраняет только начало и конец каждой группы.