public static UniqueGraph <TT> ToGraph <T, TT>(this IEnumerable <T> items, Func <T, TT> parent, Func <T, TT> child) { var graph = new UniqueGraph <TT>(); foreach (var item in items) { graph.GetOrCreate(parent(item)).LinkTo(graph.GetOrCreate(child(item))); } return(graph); }
public static UniqueGraph <string> ToGraph(this IEnumerable <string> items, string format) { var graph = new UniqueGraph <string>(); foreach (var info in items.Extract <VertexInfo <string> >(format)) { var parent = graph.GetOrCreate(info.Value); foreach (var child in info.Children) { parent.LinkTo(graph.GetOrCreate(child)); } } return(graph); }
public Day12() { Part = 2; Graph = Input.Select(s => s.SingleSplit('-')).ToGraph(tuple => tuple.Left, tuple => tuple.Right); }
public static Vertex <T, TEdge> GetOrCreate <T, TEdge>(this UniqueGraph <T, Vertex <T, TEdge>, TEdge> graph, T value) where TEdge : Edge <T> { return(graph.GetOrCreate(value, v => new SimpleVertex <T, TEdge>(v))); }