Example #1
0
            public long Generate(long generations)
            {
                for (long generation = 0; generation < generations; generation++)
                {
                    var newGeneration = new BitArray(Potteries.Length);
                    foreach (var i in Enumerable.Range(0, Potteries.Length - 5))
                    {
                        var part = Potteries.CopySlice(i, 5);
                        foreach (var pattern in SpreadPatterns)
                        {
                            if (part.AreFirstFiveBitsEqual(pattern.Pots))
                            {
                                newGeneration[i + 2] = pattern.Outcome;
                            }
                        }
                    }
                    Potteries = newGeneration;

                    var sum           = GetSum();
                    var sumDifference = sum - _previousSum;

                    if (_previousDifference == sumDifference)
                    {
                        return(sum + (generations - generation - 1) * sumDifference);
                    }

                    _previousSum        = sum;
                    _previousDifference = sumDifference;
                }

                return(GetSum());
            }
Example #2
0
 public long GetSum() => Potteries.Cast <bool>().Select((b, i) => b ? i - ZeroIndex : 0).Sum();
Example #3
0
 public override string ToString() => new string(Potteries.Cast <bool>().Select(b => b ? '#' : '.').ToArray());