using System; using System.Collections.Generic; using System.IO; namespace D12._1 { class Rules : Dictionary { } class Program { static void Main(string[] args) { if (args.Length < 1) return; if (File.Exists(args[0]) == false) return; var file = File.OpenText(args[0]); var state = file.ReadLine().Substring(@"initial state: ".Length); file.ReadLine(); var ruleset = new Rules(); do { var line = file.ReadLine(); if (line == null) break; var s = line.Split(" => "); ruleset.Add(s[0], s[1][0]); } while (true); int left = 0; for (int i = 0; i < 20; ++i) { string nstate = ""; for (int j = -2; j < state.Length + 2; ++j) nstate += getState(state, j, ruleset); left -= 2; state = nstate; CalcResult(state, left); } } private static void CalcResult(string state, int l) { int left = l; int result = 0; foreach (char c in state) { if (c == '#') result += left; left++; } Console.WriteLine(result); } static char getState(string state, int p, Rules rules) { var sb = ""; for (var i = -2; i <= 2; ++i) sb += p + i < 0 || p + i >= state.Length ? '.' : state[p + i]; return rules[sb]; } } }