コード例 #1
0
    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);
    }
コード例 #2
0
    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);
    }
コード例 #3
0
 public Day12()
 {
     Part  = 2;
     Graph = Input.Select(s => s.SingleSplit('-')).ToGraph(tuple => tuple.Left, tuple => tuple.Right);
 }
コード例 #4
0
 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)));
 }