Pyramid.cs 659 B

123456789101112131415161718192021222324252627282930313233
  1. namespace Day9;
  2. public class Pyramid
  3. {
  4. public Sequence Bottom { get; }
  5. private readonly IList<Sequence> _layers = new List<Sequence>();
  6. public Pyramid(Sequence bottom)
  7. {
  8. Bottom = bottom;
  9. Build();
  10. }
  11. public long Predict()
  12. {
  13. var next = 0L;
  14. foreach (var sequence in _layers.Reverse().Skip(1))
  15. {
  16. next = sequence.Next(next);
  17. }
  18. return next;
  19. }
  20. private void Build()
  21. {
  22. _layers.Add(Bottom);
  23. while (!_layers.Last().IsZeros())
  24. {
  25. _layers.Add(_layers.Last().Difference());
  26. }
  27. }
  28. }