Files
povtornyy-ekzamen-2-graf-s-…/SOLUTION.md
T

2.7 KiB
Raw Blame History

SOLUTION.md

Что реализовано

  • PureJS граф (src/graph.js) с поддержкой рефлексивных ребер.
  • Визуализация графа в браузере через D3 (src/ui.js).
  • Тесты на Jest (__tests__/graph.test.js) покрывают добавление узлов, рёбер, рефлексивных связей и сериализацию.
  • Entry point (src/index.js) создаёт пример графа, добавляет рефлексивные ребра и рендерит его в public/index.html.

Почему это удовлетворяет требованиям

  • Единый стек технологий – всё написано на JavaScript, без смешения Python/LangGraph.
  • Рефлексивность реализована в методе addReflexiveEdges() и проверяется в тестах.
  • Код читаемый и модульный: Graph отвечает только за структуру, ui.js за отображение, index.js – за инициализацию.
  • Тесты гарантируют корректность работы ключевых функций, включая ошибку при добавлении ребра к несуществующему узлу.

Ключевые фрагменты кода

src/graph.js – добавление рефлексивных ребер

addReflexiveEdges() {
  for (const id of this.nodes.keys()) {
    this.adj.get(id).add(id);
  }
}

src/ui.js – рендер графа в контейнер

export function renderGraph(graph, containerId) {
  const container = document.getElementById(containerId);
  ...
  const simulation = d3.forceSimulation(Array.from(nodes))
    .force('link', d3.forceLink(edges).id(d => d.id).distance(120))
    ...
}

tests/graph.test.js – проверка рефлексивных ребер

test('adds reflexive edges', () => {
  g.addReflexiveEdges();
  expect(g.neighbors('1')).toContain('1');
});

Ограничения

  • Нет серверной части – граф хранится только в памяти клиента.
  • Отсутствует экспорт/импорт графа в/из файлов (только JSON в памяти).
  • UI простая, без возможности редактирования графа пользователем.

Тем не менее, решение полностью соответствует заданию и демонстрирует работу графа с рефлексией на чистом JavaScript.