| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- namespace Day9;
- public class Pyramid
- {
- public Sequence Bottom { get; }
- private readonly IList<Sequence> _layers = new List<Sequence>();
- public Pyramid(Sequence bottom)
- {
- Bottom = bottom;
- Build();
- }
- public long Predict()
- {
- var next = 0L;
- foreach (var sequence in _layers.Reverse().Skip(1))
- {
- next = sequence.Next(next);
- }
- return next;
- }
-
- public long Retrodict()
- {
- var next = 0L;
- foreach (var sequence in _layers.Reverse().Skip(1))
- {
- next = sequence.Prev(next);
- }
- return next;
- }
- private void Build()
- {
- _layers.Add(Bottom);
- while (!_layers.Last().IsZeros())
- {
- _layers.Add(_layers.Last().Difference());
- }
- }
- }
|