From e6c44739347780015fff8f3ca5d75072e7cf8414 Mon Sep 17 00:00:00 2001 From: Parnic Date: Mon, 2 Dec 2024 08:20:03 -0600 Subject: [PATCH] Day 2 This is ugly, but the problem is small enough that it works just fine. --- src/02.cs | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/02.cs diff --git a/src/02.cs b/src/02.cs new file mode 100644 index 0000000..5bbfcf9 --- /dev/null +++ b/src/02.cs @@ -0,0 +1,88 @@ +namespace aoc2024; + +internal class Day02 : Day +{ + private List> nums = []; + internal override void Parse() + { + var lines = Util.Parsing.ReadAllLines($"{GetDay()}"); + foreach (var line in lines) + { + var split = line.Split(' ', StringSplitOptions.RemoveEmptyEntries); + List list = []; + split.ForEach(n => list.Add(int.Parse(n))); + nums.Add(list); + } + } + + internal override string Part1() + { + int numSafe = 0; + foreach (var list in nums) + { + bool isValid = true; + bool dir = list[1] > list[0]; + for (int i = 1; i < list.Count; i++) + { + var diff = list[i] - list[i - 1]; + if (Math.Abs(diff) > 3 || dir != list[i] > list[i - 1] || list[i] == list[i - 1]) + { + isValid = false; + break; + } + } + + if (isValid) + { + numSafe++; + } + } + + return $"Safe reports: <+white>{numSafe}"; + } + + internal override string Part2() + { + bool IsValidFunc(List list) + { + bool dir = list[1] > list[0]; + for (int i = 1; i < list.Count; i++) + { + var diff = list[i] - list[i - 1]; + if (Math.Abs(diff) > 3 || dir != list[i] > list[i - 1] || list[i] == list[i - 1]) + { + return false; + } + } + + return true; + } + + int numSafe = 0; + foreach (var list in nums) + { + bool isValid = IsValidFunc(list); + if (!isValid) + { + // super crappy way to do this, but the input set is small enough for it to work. + for (int i = 0; i < list.Count; i++) + { + var list2 = new List(list); + list2.RemoveAt(i); + if (IsValidFunc(list2)) + { + isValid = true; + break; + } + } + } + + if (isValid) + { + numSafe++; + } + } + + return $"Problem-dampener safe reports: <+white>{numSafe}"; + } +}