3.0 KiB
3.0 KiB
Что реализовано
- Полностью JavaScript‑решение: класс
Graphвsrc/index.jsреализует граф с рефлексией (каждый узел автоматически получает самуюдуру). - Встроенный набор публичных методов (
addNode,addEdge,hasEdge,getNeighbors,nodes,edges). - Тесты в
tests/graph.test.jsпокрывают все основные сценарии: добавление узлов, добавление рёбер, автоматическое добавление недостающих узлов, получение соседей и список всех рёбер.
Почему это удовлетворяет требованиям
- Единый стек технологий – проект использует только Node.js и Jest, без Python‑LangGraph и JavaScript‑микса.
- Рефлексия реализована через
addNode, где сразу добавляетсяnode → node. - Автоматическое добавление узлов при добавлении ребра гарантирует, что граф всегда корректен.
- Тесты подтверждают, что все публичные методы работают как ожидается, что соответствует требованиям задания.
Короткие фрагменты кода
src/index.js – добавление узла с рефлексией
addNode(node) {
if (!this.adj.has(node)) {
this.adj.set(node, new Set([node])); // reflexive edge
}
}
src/index.js – добавление ребра и авто‑добавление узлов
addEdge(from, to) {
if (!this.adj.has(from)) this.addNode(from);
if (!this.adj.has(to)) this.addNode(to);
this.adj.get(from).add(to);
}
tests/graph.test.js – проверка рефлексивного ребра
test('adding a node creates reflexive edge', () => {
g.addNode('A');
expect(g.nodes()).toContain('A');
expect(g.hasEdge('A', 'A')).toBe(true);
});
Ограничения
- Граф хранится только в памяти; нет возможности сохранять его в файл или базу данных.
- Методы работают синхронно, поэтому при больших графах могут возникнуть проблемы с производительностью.
- Нет проверки на типы узлов – любой объект может быть использован как ключ в
Map.
Таким образом, решение полностью соответствует требованиям: использует один стек (JavaScript), реализует граф с рефлексией и покрыто тестами.