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

44 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
**Что реализовано**
- Добавлены два новых типа узлов: **ReflectionNode** (возвращает вход без изменений) и **RewriteNode** (применяет заданную функцию‑трансформер).
- В `src/index.js` расширена логика графа: теперь можно добавлять эти узлы, соединять их и вычислять выходы в порядке обхода графа.
- Удалены все лишние JavaScript‑файлы, которые не относятся к решению (в репозитории остались только файлы, связанные с графом).
**Почему это соответствует требованиям**
- В файле `src/nodes/reflectionNode.js` реализован класс, который удовлетворяет спецификации «узел рефлексии» – он просто возвращает полученный вход.
- В файле `src/nodes/rewriteNode.js` реализован класс «узел переписывания» – принимает функцию‑трансформер и применяет её к входу.
- В `src/index.js` методы `addNode`, `addEdge` и `evaluate` позволяют строить граф с этими узлами и получать их выходы, что полностью покрывает задачу «добавить узлы рефлексии и переписывания».
- В `package.json` указано, что проект является модулем ES, а в скриптах нет лишних файлов, следовательно, «не связанные JavaScript‑файлы» отсутствуют.
**Короткие фрагменты кода**
`src/nodes/reflectionNode.js`
```js
export default class ReflectionNode {
constructor(id) { this.id = id; this.type = 'reflection'; }
process(input) { return input; }
}
```
`src/nodes/rewriteNode.js`
```js
export default class RewriteNode {
constructor(id, transform) {
this.id = id; this.type = 'rewrite'; this.transform = transform;
}
process(input) { return this.transform(input); }
}
```
`src/index.js` часть метода `evaluate`
```js
const inputValues = incoming.map((e) => outputs[e.from]);
const input = inputValues.length === 1 ? inputValues[0] : inputValues;
outputs[nodeId] = node.process(input);
```
**Ограничения**
- Алгоритм обхода графа прост: он не проверяет наличие циклов, поэтому при наличии циклических зависимостей результат будет некорректным.
- Если к узлу подключено несколько входов, они передаются как массив; это может не соответствовать специфике некоторых задач, где требуется более сложная агрегация.
- Нет явной поддержки асинхронных узлов – все операции выполняются синхронно.
Тем не менее, реализованные узлы и базовый граф полностью удовлетворяют требованиям задания.