private string SolveB() { var eris = new MultiEris(); var lines = File.ReadAllLines(Input, Encoding.UTF8); for (var y = 0; y < 5; y++) { for (var x = 0; x < 5; x++) { if (lines[y][x] == '#') { var index = new MultiEris.Index { X = x, Y = y, Depth = 0 }; eris.SetContent(index, true); } } } var next = eris; for (int i = 0; i < 200; i++) { next = next.Iterate(); } return(next.BugCount.ToString()); }
public MultiEris Iterate() { var bugs = IndicesWithBugs(); // do all the neighbors of all the bugs, and also the bugs. var toEvaluate = new List <MultiEris.Index>(bugs); foreach (var b in bugs) { toEvaluate.AddRange(Neighbors(b)); } var unique = toEvaluate.Distinct(); var next = new MultiEris(); foreach (var u in unique) { var neighbors = Neighbors(u); var neighborBugCount = neighbors.Sum(n => GetContent(n) ? 1 : 0); bool hasBug = GetContent(u); bool isBug = hasBug ? (neighborBugCount == 1) : (neighborBugCount == 1 || neighborBugCount == 2); if (isBug) { next.SetContent(u, true); } } return(next); }
public bool ProveB() { var index1 = new MultiEris.Index { Depth = 0, X = 3, Y = 3 }; var neighbors1 = MultiEris.Neighbors(index1); if (neighbors1.Length != 4) { return(false); } var index2 = new MultiEris.Index { Depth = 1, X = 3, Y = 0 }; var neighbors2 = MultiEris.Neighbors(index2); if (neighbors2.Length != 4) { return(false); } var index3 = new MultiEris.Index { Depth = 1, X = 4, Y = 0 }; var neighbors3 = MultiEris.Neighbors(index3); if (neighbors3.Length != 4) { return(false); } var index4 = new MultiEris.Index { Depth = 1, X = 3, Y = 2 }; var neighbors4 = MultiEris.Neighbors(index4); if (neighbors4.Length != 8) { return(false); } var eris = new MultiEris(); var lines = File.ReadAllLines(Example, Encoding.UTF8); for (var y = 0; y < 5; y++) { for (var x = 0; x < 5; x++) { if (lines[y][x] == '#') { var index = new MultiEris.Index { X = x, Y = y, Depth = 0 }; eris.SetContent(index, true); } } } if (eris.BugCount != 8) { return(false); } // Iterate 10 times var next = eris; for (int i = 0; i < 10; i++) { next = next.Iterate(); } if (next.BugCount != 99) { return(false); } return(true); }