AdventOfCode/AdventOfCode.Solutions/2023/Day 09/Day09.cs
2023-12-09 09:18:10 +01:00

44 lines
1.2 KiB
C#

using AdventOfCode.Core;
namespace AdventOfCode.Solutions._2023
{
public class Day09(InputReader reader) : IChallange
{
private InputReader _inputReader = reader;
public async Task<string> GetSolutionPart1()
{
long sum = 0;
await foreach (long[] list in _inputReader.ReadLineAsLongArray(" "))
{
sum += GetNextValue(list);
}
return sum.ToString();
}
public async Task<string> 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);
}
}
}