2021-11-09 21:52:21 +00:00
|
|
|
namespace aoc2019;
|
2019-12-06 07:02:01 +00:00
|
|
|
|
2021-11-09 21:52:21 +00:00
|
|
|
public sealed class Day06 : Day
|
2019-12-06 07:02:01 +00:00
|
|
|
{
|
2021-11-09 21:52:21 +00:00
|
|
|
private readonly Dictionary<string, string> input;
|
2020-12-02 05:36:24 +00:00
|
|
|
|
2021-11-09 21:52:21 +00:00
|
|
|
public Day06() : base(6, "Universal Orbit Map")
|
|
|
|
{
|
|
|
|
input = Input.ToDictionary(i => i.Split(')')[1], i => i.Split(')')[0]);
|
|
|
|
}
|
2019-12-06 07:02:01 +00:00
|
|
|
|
2021-11-09 21:52:21 +00:00
|
|
|
private List<string> GetParents(string obj)
|
|
|
|
{
|
|
|
|
var res = new List<string>();
|
|
|
|
for (var curr = obj; curr != "COM"; curr = input[curr])
|
|
|
|
res.Add(curr);
|
|
|
|
res.Add("COM");
|
|
|
|
return res;
|
|
|
|
}
|
2019-12-06 07:02:01 +00:00
|
|
|
|
2021-12-01 19:56:16 +00:00
|
|
|
public override string Part1() =>
|
|
|
|
$"{input.Keys.Sum(o => GetParents(o).Count - 1)}";
|
2019-12-06 07:02:01 +00:00
|
|
|
|
2021-11-09 21:52:21 +00:00
|
|
|
public override string Part2()
|
|
|
|
{
|
|
|
|
var you = GetParents("YOU");
|
|
|
|
var san = GetParents("SAN");
|
|
|
|
var common = 1;
|
|
|
|
for (; you[^common] == san[^common]; common++) ;
|
|
|
|
return $"{you.Count + san.Count - common * 2}";
|
2019-12-06 07:02:01 +00:00
|
|
|
}
|
2021-11-09 21:52:21 +00:00
|
|
|
}
|