private static int CountV(int x, Eris eris) { var c = 0; for (int i = 0; i < N; i++) { if (eris.Get(x, i)) { c++; } } return(c); }
private static int CountH(int y, Eris eris) { var c = 0; for (int i = 0; i < N; i++) { if (eris.Get(i, y)) { c++; } } return(c); }
public bool ProveA() { var eris = new Eris(); var lines = File.ReadAllLines(Example, Encoding.UTF8); for (var y = 0; y < 5; y++) { for (var x = 0; x < 5; x++) { eris.SetBug(x, y, lines[y][x] == '#'); } } return(SimpleSolution(eris, false) == 2129920); }
private string SolveA() { var eris = new Eris(); var lines = File.ReadAllLines(Input, Encoding.UTF8); for (var y = 0; y < 5; y++) { for (var x = 0; x < 5; x++) { eris.SetBug(x, y, lines[y][x] == '#'); } } return(SimpleSolution(eris, false).ToString()); }
public Eris Iterate() { var next = new Eris(); for (var y = 0; y < 5; y++) { for (var x = 0; x < 5; x++) { int neighbors = NeighboringBugs(x, y); bool hasBug = GetBug(x, y); bool isBug = hasBug ? (neighbors == 1) : (neighbors == 1 || neighbors == 2); next.SetBug(x, y, isBug); } } return(next); }
public override string Part1() { var eris = new Eris(ReadAllText(), false, 0); var set = new DefaultDict <int, int>(); while (true) { var r = eris.Rating(); set[r]++; if (set[r] > 1) { return(r.ToString()); } eris.Tick(); eris.Swap(); } }
public override string Part2() { foreach (var i in Enumerable.Range(-100, 201)) { Planet[i] = new Eris(i == 0 ? ReadAllText() : string.Empty, true, i); } foreach (var n in Enumerable.Range(0, 200)) { foreach (var e in Planet.Values) { e.Tick(); } foreach (var e in Planet.Values) { e.Swap(); } } return(Planet.Values.Sum(x => x.CountBugs()).ToString()); }
private long SimpleSolution(Eris eris, bool trace) { var patterns = new HashSet <long>(); var next = eris; while (true) { var hash = next.Hash(); if (patterns.Contains(hash)) { return(hash); } patterns.Add(hash); next = next.Iterate(); if (trace) { next.Trace(); } } }