class PositionalGenerator::Builder
def build_stack(graph)
-
(Array
->)
Parameters:
-
graph
(Array<(Integer, Integer)>
) --
def build_stack(graph) require 'set' terminals = graph.filter_map { |(from, to)| to.nil? && from } stack = [terminals] seen = Set.new(terminals) deps = [] loop do stack[-1].each do |e| deps = graph.select { |(from, to)| to == e && !seen.include?(from) }.map do |from, _to| seen << from from end stack << deps if deps.any? end break if deps.empty? end stack end