my advent of code solutions
at main 52 lines 1.4 kB view raw
1namespace Solutions._2020; 2 3/// <summary> 4/// Day 10: <a href="https://adventofcode.com/2020/day/10" /> 5/// </summary> 6public sealed class Day10AdapterArray() : Day(2020, 10, "Adapter Array") 7{ 8 private int[]? _adapters; 9 private long[]? _memo; 10 11 public override void ProcessInput() 12 { 13 var parsed = Input.Select(int.Parse).ToArray(); 14 // add socket and device to the list 15 _adapters = parsed.Concat([0, parsed.Max() + 3]).OrderBy(i => i).ToArray(); 16 _memo = new long[_adapters.Length]; 17 } 18 19 private long Connections(int i) 20 { 21 if (i == _adapters!.Length - 1) _memo![i] = 1; 22 if (_memo![i] > 0) return _memo[i]; 23 24 for (var j = i + 1; j <= i + 3 && j < _adapters.Length; j++) 25 if (_adapters[j] - _adapters[i] <= 3) 26 _memo[i] += Connections(j); 27 28 return _memo[i]; 29 } 30 31 public override object Part1() 32 { 33 var ones = 0; 34 var threes = 0; 35 36 for (var i = 0; i < _adapters!.Length - 1; i++) 37 switch (_adapters[i + 1] - _adapters[i]) 38 { 39 case 1: 40 ones++; 41 break; 42 case 3: 43 threes++; 44 break; 45 default: throw new("something went wrong"); 46 } 47 48 return ones * threes; 49 } 50 51 public override object Part2() => Connections(0); 52}