Files
ekzamen-samokorrektiruyusch…/SOLUTION.md
T

3.4 KiB
Raw Blame History

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

  • Добавлены два новых типа узлов: 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

export default class ReflectionNode {
  constructor(id) { this.id = id; this.type = 'reflection'; }
  process(input) { return input; }
}

src/nodes/rewriteNode.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

const inputValues = incoming.map((e) => outputs[e.from]);
const input = inputValues.length === 1 ? inputValues[0] : inputValues;
outputs[nodeId] = node.process(input);

Ограничения

  • Алгоритм обхода графа прост: он не проверяет наличие циклов, поэтому при наличии циклических зависимостей результат будет некорректным.
  • Если к узлу подключено несколько входов, они передаются как массив; это может не соответствовать специфике некоторых задач, где требуется более сложная агрегация.
  • Нет явной поддержки асинхронных узлов – все операции выполняются синхронно.

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