public static PathGenerator ThreeBitGenerator()
    {
        PathGenerator gen = new PathGenerator();

        gen.AddRule(new SimpleRule("000", 0));
        gen.AddRule(new SimpleRule("100", 1));
        gen.AddRule(new SimpleRule("010", 2));
        gen.AddRule(new SimpleRule("110", 3));
        gen.AddRule(new SimpleRule("001", 4));
        gen.AddRule(new SimpleRule("101", 5));
        gen.AddRule(new SimpleRule("011", 6));
        gen.AddRule(new SimpleRule("111", 7));
        return(gen);
    }
    public List <int> PostProcess(Tape tape)
    {
        List <int>    t    = new List <int>(tape);
        PathGenerator post = new PathGenerator();

        post.AddRule(new SimpleRule("2525", () => Random.Range(1, 7)));
        post.AddRule(new SimpleRule("777", () => Random.Range(1, 6)));
        post.AddRule(new SimpleRule("222", () => Random.Range(1, 6)));
        post.AddRule(new SimpleRule("22", () => Random.Range(1, 6)));
        post.AddRule(new SimpleRule("333", () => Random.Range(1, 6)));
        post.AddRule(new SimpleRule("33", () => Random.Range(1, 6)));
        post.AddRule(new SimpleRule("444", () => Random.Range(1, 6)));
        post.AddRule(new SimpleRule("44", () => Random.Range(1, 6)));
        post.AddRule(new SimpleRule("555", () => Random.Range(1, 6)));
        post.AddRule(new SimpleRule("55", () => Random.Range(1, 6)));
        post.AddRule(new SimpleRule("000", () => Random.Range(1, 7)));
        post.AddRule(new SimpleRule("00", () => Random.Range(1, 6)));
        post.AddRule(new SimpleRule("07", () => Random.Range(1, 7)));
        post.AddRule(new SimpleRule("0", () => Random.Range(1, 7)));
        for (int i = 0; i < t.Count; i++)
        {
            t[i] = post.Process(tape, i);
        }
        t[0] = 0;
        return(t);
    }