38 lines
1.2 KiB
C#
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);
|
|
}
|
|
}
|
|
} |