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()); }
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); } } }