namespace AOC2015;
///
/// Day 14:
///
public sealed class Day14() : Day(2015, 14, "Reindeer Olympics")
{
private List? _reindeer;
public override void ProcessInput() => _reindeer = Input.Select(i => new Reindeer(i)).ToList();
public override object Part1() =>
_reindeer!.Select(r => r.Fly(2503)).Max();
public override object Part2() =>
Enumerable.Range(1, 2503)
.SelectMany(time => _reindeer!.GroupBy(r => r.Fly(time)).OrderByDescending(r => r.Key).First())
.GroupBy(r => r)
.Max(g => g.Count());
private class Reindeer
{
private readonly int _duration;
private readonly int _rest;
private readonly int _speed;
public Reindeer(string input)
{
var p = input.Split(' ');
_speed = int.Parse(p[3]);
_duration = int.Parse(p[6]);
_rest = int.Parse(p[13]);
}
public int Fly(int time) =>
time / (_duration + _rest) * _speed * _duration // number iterations * travel distance
+ Math.Min(_duration, time % (_duration + _rest)) * _speed; // last partial iteration
}
}