예제 #1
0
    int Iterate(string input, int iterations)
    {
        var mtx     = Mtx.FromString(".#./..#/###");
        var ruleset = new RuleSet(input);

        for (var i = 0; i < iterations; i++)
        {
            mtx = ruleset.Apply(mtx);
        }
        return(mtx.Count());
    }
예제 #2
0
    public RuleSet(string input)
    {
        rules2 = new Dictionary <int, Mtx>();
        rules3 = new Dictionary <int, Mtx>();

        foreach (var line in input.Split('\n'))
        {
            var parts = Regex.Split(line, " => ");
            var left  = parts[0];
            var right = parts[1];
            var rules =
                left.Length == 5 ? rules2 :
                left.Length == 11 ? rules3 :
                throw new Exception();
            foreach (var mtx in Variations(Mtx.FromString(left)))
            {
                rules[mtx.CodeNumber] = Mtx.FromString(right);
            }
        }
    }