From 9e3c218ffe8fa3d375b7e83ac3f241f93d4ef7d6 Mon Sep 17 00:00:00 2001 From: Rob Stoffelen Date: Mon, 2 Dec 2024 09:16:36 +0100 Subject: [PATCH] Completed day 2 --- AdventOfCode.Solutions/2024/Day 02/Day02.cs | 99 ++++++++------------- 1 file changed, 35 insertions(+), 64 deletions(-) diff --git a/AdventOfCode.Solutions/2024/Day 02/Day02.cs b/AdventOfCode.Solutions/2024/Day 02/Day02.cs index 9f58f67..7048d51 100644 --- a/AdventOfCode.Solutions/2024/Day 02/Day02.cs +++ b/AdventOfCode.Solutions/2024/Day 02/Day02.cs @@ -18,76 +18,47 @@ namespace AdventOfCode.Solutions._2024 } //2 - // - public async Task GetSolutionPart1() - { - //_inputReader.SetSampleInput(true); - string[] data = await _inputReader.ReadAsArrayString(); - int save = data.Length; - foreach (string line in data) - { - int[] intData = line.Split(' ').Select(int.Parse).ToArray(); - bool isIncrease = intData[1] < intData[0]; - for (int index = 1; index < intData.Length; index++) - { - int trueDiff = intData[index - 1] - intData[index]; - int diff = Math.Abs(trueDiff); - if (diff < 1 || diff > 3) - { - save--; - break; - } + //230 + public async Task GetSolutionPart1() + => (await _inputReader.ReadAsArrayString()) + .Select(ParselineToReports) + .Where(reports => AreReportsSave(reports, false)) + .Count() + .ToString(); - if (isIncrease && trueDiff < 0) - { - save--; - break; - } - else if (!isIncrease && trueDiff > 0) - { - save--; - break; - } + //4 + //301 + public async Task GetSolutionPart2() => (await _inputReader.ReadAsArrayString()) + .Select(ParselineToReports) + .Where(reports => AreReportsSave(reports, true)) + .Count() + .ToString(); + + private static bool AreReportsSave(int[] reports, bool tolarance = false) + { + bool isIncrease = reports[1] < reports[0]; + for (int index = 1; index < reports.Length; index++) + { + int trueDiff = reports[index - 1] - reports[index]; + int diff = Math.Abs(trueDiff); + if (diff < 1 || diff > 3) + { + return tolarance && HasSafeCombo(reports); + } + + if ((isIncrease && trueDiff < 0) || (!isIncrease && trueDiff > 0)) + { + return tolarance && HasSafeCombo(reports); } } - return save.ToString(); + return true; } - // - // - public async Task GetSolutionPart2() - { - string[] data = await _inputReader.ReadAsArrayString(); - int save = data.Length; - foreach (string line in data) - { - int[] intData = line.Split(' ').Select(int.Parse).ToArray(); - bool isIncrease = intData[1] < intData[0]; - for (int index = 1; index < intData.Length; index++) - { - int trueDiff = intData[index - 1] - intData[index]; - int diff = Math.Abs(trueDiff); - if (diff < 1 || diff > 3) - { - save--; - break; - } + private static bool HasSafeCombo(int[] reports) + => reports.Select((_, i) => SkipReport(reports, i)).Any(reports => AreReportsSave(reports)); - if (isIncrease && trueDiff < 0) - { - save--; - break; - } - else if (!isIncrease && trueDiff > 0) - { - save--; - break; - } - } - } - - return save.ToString(); - } + private static int[] SkipReport(int[] reports, int index) => reports.Where((_, i) => i != index).ToArray(); + private static int[] ParselineToReports(string line) => line.Split(' ').Select(int.Parse).ToArray(); } } \ No newline at end of file