public override object SolvePart2(string[] input) { var previousForrests = new List <Forrest>(); var forrest = new Forrest(input); previousForrests.Add(forrest); var iterations = 1_000_000_000; for (var i = 1; i <= iterations; i++) { forrest = forrest.NextGeneration(); var sameExistingForrestIndex = previousForrests.IndexOf(forrest); if (sameExistingForrestIndex != -1) { var repeatCount = i - sameExistingForrestIndex; var remainingIterationsFromFirstRepeat = iterations - sameExistingForrestIndex; var resultForrestIndex = sameExistingForrestIndex + (remainingIterationsFromFirstRepeat % repeatCount); var resultForrest = previousForrests[resultForrestIndex]; return(resultForrest.TreeCount * resultForrest.LumberyardCount); } previousForrests.Add(forrest); } throw new Exception("End of the World!"); }
public override object SolvePart1(string[] input) { var forrest = new Forrest(input); for (var i = 1; i <= 10; i++) { forrest = forrest.NextGeneration(); } return(forrest.TreeCount * forrest.LumberyardCount); }
protected bool Equals(Forrest other) { if (!(SizeX == other.SizeX && SizeY == other.SizeY)) { return(false); } for (var i = 0; i < SizeX * SizeY; i++) { if (_tiles[i] != other._tiles[i]) { return(false); } } return(true); }