AdventOfCode2022/Handlers/Day03.cs

93 lines
2.6 KiB
C#
Raw Permalink Normal View History

2022-12-04 23:32:12 +01:00
namespace AdventOfCode2022.Handlers
{
public class Day03
{
string[] letters = new string[] {};
string[] rucksack = new string[] {};
public Day03()
{
rucksack = File.ReadAllText(@"./days/03/input").Trim().Split("\n");
// a-z
for (var i = 97; i <= 122; i++)
{
letters = letters.Append(((char)i).ToString()).ToArray();
}
// A-Z
for (var i = 65; i <= 90; i++)
{
letters = letters.Append(((char)i).ToString()).ToArray();
}
}
public int GetLetterPriority(string letter)
{
return Array.IndexOf(letters, letter) + 1;
}
public void PartA()
{
var sum = 0;
foreach (var line in rucksack)
{
var lineLength = line.Length;
var halfPoint = lineLength / 2;
var partOne = line.Substring(0, halfPoint);
var partTwo = line.Substring(halfPoint);
var firstParts = partOne.ToArray();
var secondParts = partTwo.ToArray();
var diffLetter = "";
foreach (var letter in firstParts)
{
if (secondParts.Contains(letter))
{
diffLetter = letter.ToString();
break;
}
}
if (diffLetter == "")
{
Console.WriteLine("No diff letter found");
}
sum += GetLetterPriority(diffLetter);
}
Console.WriteLine($"Part A: {sum}");
}
public void PartB()
{
var groups = rucksack.Chunk(3);
var sum = 0;
foreach (var group in groups)
{
var firstSackLetters = group[0];
var commonLetter = "";
foreach (var ch in firstSackLetters)
{
var letter = Convert.ToString(ch);
var exists = group.All(x => x.Contains(letter));
if (exists)
{
commonLetter = letter;
break;
}
}
if (commonLetter == "")
{
Console.WriteLine("No common letter found");
}
sum += GetLetterPriority(commonLetter);
}
Console.WriteLine($"Part B: {sum}");
}
}
}