using System; using System.Collections.Generic; using System.Linq; namespace AoCCSharp { internal class Day15 { internal void Solve() { string input = "0,8,15,2,12,1,4"; int numberAt2020 = 30000000; var numbers = input.Split(",").Select(int.Parse).ToList(); Dictionary numberAge = numbers .Select((n, i) => (n, i)) .ToDictionary(tuple => tuple.n, tuple => tuple.i); int currentNumber = 0; // initial numbers are unique int nextNumber; int count = numbers.Count; do { if (numberAge.ContainsKey(currentNumber)) { nextNumber = count - numberAge[currentNumber]; numberAge[currentNumber] = count; } else { nextNumber = 0; numberAge[currentNumber] = count; } count += 1; if (count < numberAt2020) { currentNumber = nextNumber; } } while (count < numberAt2020); Console.WriteLine(currentNumber); } } }