ben
/
aoc
1
0
Fork 0
aoc/AOC2020/Day10.cs

52 lines
1.4 KiB
C#

namespace AOC2020;
/// <summary>
/// Day 10: <a href="https://adventofcode.com/2020/day/10" />
/// </summary>
public sealed class Day10() : Day(2020, 10, "Adapter Array")
{
private int[]? _adapters;
private long[]? _memo;
public override void ProcessInput()
{
var parsed = Input.Select(int.Parse).ToArray();
// add socket and device to the list
_adapters = parsed.Concat(new[] { 0, parsed.Max() + 3 }).OrderBy(i => i).ToArray();
_memo = new long[_adapters.Length];
}
private long Connections(int i)
{
if (i == _adapters!.Length - 1) _memo![i] = 1;
if (_memo![i] > 0) return _memo[i];
for (var j = i + 1; j <= i + 3 && j < _adapters.Length; j++)
if (_adapters[j] - _adapters[i] <= 3)
_memo[i] += Connections(j);
return _memo[i];
}
public override object Part1()
{
var ones = 0;
var threes = 0;
for (var i = 0; i < _adapters!.Length - 1; i++)
switch (_adapters[i + 1] - _adapters[i])
{
case 1:
ones++;
break;
case 3:
threes++;
break;
default: throw new("something went wrong");
}
return ones * threes;
}
public override object Part2() => Connections(0);
}