Skip to content

Commit 0edbda9

Browse files
committed
AoC 2023, Day 3: Solve Part 2
1 parent db00bd4 commit 0edbda9

File tree

1 file changed

+32
-18
lines changed

1 file changed

+32
-18
lines changed

Diff for: cs/AoC/2023/AoC2023-Day03/Program.cs

+32-18
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,49 @@
11
using static System.Char;
22

33
var input = File.ReadAllText("input.txt");
4+
45
var data = Parse(input);
56

67
var answer1 = Part1(data);
8+
79
Console.WriteLine(answer1);
810

9-
IEnumerable<string[]> Parse(string input)
11+
var answer2 = Part2(data);
12+
13+
Console.WriteLine(answer2);
14+
15+
string[] Parse(string input)
1016
{
11-
return input.Trim().Split('\n')
12-
.Select(line =>
13-
{
14-
var half = line.Length / 2;
15-
return new string[]
16-
{
17-
line[..half],
18-
line[half..]
19-
};
20-
});
17+
return input.Trim().Split('\n');
2118
}
2219

23-
int Part1(IEnumerable<string[]> rucksacks)
20+
int Score(char item)
21+
{
22+
if (IsLower(item))
23+
{
24+
return item - 'a' + 1;
25+
}
26+
27+
return item - 'A' + 27;
28+
}
29+
30+
int Part1(IEnumerable<string> rucksacks)
2431
{
2532
var priorities = rucksacks.Select(rucksack =>
2633
{
27-
var common = rucksack[0].Intersect(rucksack[1]).First();
28-
if (IsLower(common))
29-
{
30-
return common - 'a' + 1;
31-
}
32-
return common - 'A' + 27;
34+
var half = rucksack.Length / 2;
35+
var common = rucksack[..half].Intersect(rucksack[half..]).First();
36+
return Score(common);
37+
});
38+
return priorities.Sum();
39+
}
40+
41+
int Part2(IEnumerable<string> rucksacks)
42+
{
43+
var priorities = rucksacks.Chunk(3).Select(rucksack =>
44+
{
45+
var common = rucksack[0].Intersect(rucksack[1]).Intersect(rucksack[2]).First();
46+
return Score(common);
3347
});
3448
return priorities.Sum();
3549
}

0 commit comments

Comments
 (0)