| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- namespace D12._1
- {
- class Rules : Dictionary<string, char> { }
- 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];
- }
- }
- }
|