From ac197c4d2b7cb787dd35c8f91f2c214063574b47 Mon Sep 17 00:00:00 2001 From: cyberdick Date: Sat, 3 Dec 2022 19:07:33 +0530 Subject: [PATCH] complete day3 part 1 --- AOC2022/Properties/launchSettings.json | 2 +- AOC2022/Puzzles/Day3.cs | 60 +++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/AOC2022/Properties/launchSettings.json b/AOC2022/Properties/launchSettings.json index 0a2369f..73935b7 100644 --- a/AOC2022/Properties/launchSettings.json +++ b/AOC2022/Properties/launchSettings.json @@ -2,7 +2,7 @@ "profiles": { "WithParams": { "commandName": "Project", - "commandLineArgs": "1 2", + "commandLineArgs": "3", "workingDirectory": "./" }, "WithoutParams": { diff --git a/AOC2022/Puzzles/Day3.cs b/AOC2022/Puzzles/Day3.cs index 5743f31..ecd327b 100644 --- a/AOC2022/Puzzles/Day3.cs +++ b/AOC2022/Puzzles/Day3.cs @@ -2,13 +2,71 @@ namespace AOC2022.Puzzles; internal class Day3 : IPuzzle { + private readonly string[] _linesFromFile; + private readonly int noOfRuckSacks; + private string[] _leftComparments; + private string[] _rightCompartments; + + public Day3(string[] linesFromFile) + { + _linesFromFile = linesFromFile; + noOfRuckSacks = linesFromFile.Length; + SplitRuckSacks(); + } + + private void SplitRuckSacks() + { + _leftComparments = new string[noOfRuckSacks]; + _rightCompartments = new string[noOfRuckSacks]; + var index = 0; + foreach (var line in _linesFromFile) + { + var ruckSack = line.Trim(); + var left = ruckSack[..(ruckSack.Length / 2)]; + var right = ruckSack[(ruckSack.Length / 2)..]; + _leftComparments[index] = left; + _rightCompartments[index] = right; + index++; + } + } + public void FirstPuzzle() { - throw new NotImplementedException(); + var prioritySum = 0; + for (int i = 0; i < noOfRuckSacks; i++) + { + char duplicateItem = ' '; + foreach (var item in _leftComparments[i]) + { + if (_rightCompartments[i].Contains(item)) + { + duplicateItem = item; + break; + } + } + prioritySum += EvaluatePriority(duplicateItem); + } + Console.WriteLine(prioritySum.ToString()); } public void SecondPuzzle() { throw new NotImplementedException(); } + + private static int EvaluatePriority(char ruckSackItem) + { + if (char.IsUpper(ruckSackItem)) + { + return (ruckSackItem - 'A') + 27; + } + else if (char.IsLower(ruckSackItem)) + { + return (ruckSackItem - 'a') + 1; + } + else + { + return 0; + } + } }