2022-12-03 05:55:49 +00:00
|
|
|
namespace AOC2015;
|
2022-11-11 18:42:42 +00:00
|
|
|
|
|
|
|
/// <summary>
|
2022-12-03 05:41:38 +00:00
|
|
|
/// Day 9: <a href="https://adventofcode.com/2015/day/9"/>
|
2022-11-11 18:42:42 +00:00
|
|
|
/// </summary>
|
|
|
|
public sealed class Day09 : Day
|
|
|
|
{
|
2022-11-13 19:36:23 +00:00
|
|
|
private record Distance(string Start, string End, int Length);
|
|
|
|
private readonly List<Distance> _distances = new();
|
|
|
|
private readonly int _shortest = int.MaxValue, _longest;
|
|
|
|
|
|
|
|
public Day09() : base(2015, 9, "All in a Single Night")
|
2022-11-11 18:42:42 +00:00
|
|
|
{
|
2022-11-13 19:36:23 +00:00
|
|
|
foreach (var split in Input.Select(line => line.Split(' ')))
|
|
|
|
{
|
|
|
|
_distances.Add(new(split[0], split[2], int.Parse(split[4])));
|
|
|
|
_distances.Add(new(split[2], split[0], int.Parse(split[4])));
|
|
|
|
}
|
|
|
|
|
|
|
|
var cities = _distances.Select(d => d.Start).Distinct().ToList();
|
|
|
|
var routes = cities.Permute();
|
|
|
|
|
|
|
|
foreach (var permutation in routes.Select(p => p.ToList()))
|
|
|
|
{
|
|
|
|
var routeLength = 0;
|
|
|
|
for (var i = 1; i < permutation.Count; i++)
|
|
|
|
routeLength += _distances.First(d => d.Start == permutation[i - 1] && d.End == permutation[i]).Length;
|
|
|
|
|
|
|
|
if (routeLength < _shortest) _shortest = routeLength;
|
|
|
|
if (routeLength > _longest) _longest = routeLength;
|
|
|
|
}
|
2022-11-11 18:42:42 +00:00
|
|
|
}
|
|
|
|
|
2022-11-13 19:36:23 +00:00
|
|
|
public override object Part1() => _shortest;
|
2022-11-11 18:42:42 +00:00
|
|
|
|
2022-11-13 19:36:23 +00:00
|
|
|
public override object Part2() => _longest;
|
2022-12-03 05:55:49 +00:00
|
|
|
}
|