namespace MirageMaintenance; class Program { public static async Task Main(string[] args) { return await Task.FromResult(0); } } public class OasisReport( List valueHistories ) { public List ValueHistories { get; init; } = valueHistories; public static OasisReport Parse(string[] oasisReportInput) { var valueHistories = new List(); foreach (var line in oasisReportInput) { var values = line .Split(' ', StringSplitOptions.TrimEntries | StringSplitOptions.RemoveEmptyEntries) .Select(long.Parse) .ToList(); var valueHistory = new ValueHistory(values); valueHistories.Add(valueHistory); } return new OasisReport(valueHistories); } } public class ValueHistory( List values ) { List Values { get; init; } = values; public List CalculateDifferences(List values) => Enumerable .Range(0, values.Count - 1) .Select(i => values[i + 1] - values[i]) .ToList(); public List> CalculateHistory() { var allHistoricalValues = new List>(); var currentValues = Values; while ( allHistoricalValues.Count is 0 || allHistoricalValues.Last().Sum() is not 0 ) { var historicalValues = CalculateDifferences(currentValues); allHistoricalValues.Add(historicalValues); currentValues = historicalValues; } return allHistoricalValues; } public long CalculateNextValue() { var historicalValues = CalculateHistory(); var values = historicalValues.Prepend(Values).ToList(); return 0; } }