using AdventOfCode.Core; namespace AdventOfCode.Solutions._2023 { public class Day09(InputReader reader) : IChallange { private InputReader _inputReader = reader; public async Task GetSolutionPart1() { long sum = 0; await foreach (long[] list in _inputReader.ReadLineAsLongArray(" ")) { sum += GetNextValue(list); } return sum.ToString(); } public async Task GetSolutionPart2() { long sum = 0; await foreach (long[] list in _inputReader.ReadLineAsLongArray(" ")) { sum += GetNextValue(list.Reverse().ToArray()); } return sum.ToString(); } private long GetNextValue(long[] list) => list[^1] + GetNextValueExtrapolated(list); private long GetNextValueExtrapolated(long[] list) { long[] deltas = list.Skip(1).Select((v, i) => v - list[i]).ToArray(); if (deltas.All(d => d == 0)) { return deltas[0]; } return deltas[^1] + GetNextValueExtrapolated(deltas); } } }