From e7b9d4e44e016b746198e011beed3a22a0a72e1d Mon Sep 17 00:00:00 2001 From: Colin McMillen Date: Wed, 9 Dec 2020 08:51:14 -0500 Subject: [PATCH] day 9, part 2 solution --- 2020/Day09.cs | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/2020/Day09.cs b/2020/Day09.cs index 1519f39..6be0907 100644 --- a/2020/Day09.cs +++ b/2020/Day09.cs @@ -33,14 +33,43 @@ namespace AdventOfCode { throw new Exception("didn't find an invalid int"); } + static long CalculateWeakness(List longs, int minIndex, int maxIndex) { + long largest = 0; + long smallest = long.MaxValue; + for (int i = minIndex; i <= maxIndex; i++) { + if (longs[i] > largest) { + largest = longs[i]; + } + if (longs[i] < smallest) { + smallest = longs[i]; + } + } + return smallest + largest; + } + + static long FindWeakness(List longs, long target) { + for (int i = 0; i < longs.Count() - 1; i++) { + long total = 0; + for (int j = i; j < longs.Count() && total < target; j++) { + total += longs[j]; + if (total == target) { + return CalculateWeakness(longs, i, j); + } + } + } + throw new Exception("didn't find a weakness"); + } + static long Part1() { string[] input = File.ReadAllLines(Util.RootDir + "day09.txt"); List longs = input.ToList().Select(long.Parse).ToList(); return FindInvalid(longs, 25); } - static int Part2() { - return -1; + static long Part2(long target) { + string[] input = File.ReadAllLines(Util.RootDir + "day09.txt"); + List longs = input.ToList().Select(long.Parse).ToList(); + return FindWeakness(longs, target); } [Fact] @@ -69,8 +98,9 @@ namespace AdventOfCode { List longs = example.ToList().Select(long.Parse).ToList(); Assert.Equal(127, FindInvalid(longs, 5)); - Assert.Equal(50047984, Part1()); - Assert.Equal(-1, Part2()); + long invalidNumber = Part1(); + Assert.Equal(50047984, invalidNumber); + Assert.Equal(5407707, Part2(invalidNumber)); } } }