2020aoc/Day15.cs

38 lines
1.2 KiB
C#

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<int, int> 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);
}
}
}