File tree 1 file changed +32
-18
lines changed
cs/AoC/2023/AoC2023-Day03
1 file changed +32
-18
lines changed Original file line number Diff line number Diff line change 1
1
using static System . Char ;
2
2
3
3
var input = File . ReadAllText ( "input.txt" ) ;
4
+
4
5
var data = Parse ( input ) ;
5
6
6
7
var answer1 = Part1 ( data ) ;
8
+
7
9
Console . WriteLine ( answer1 ) ;
8
10
9
- IEnumerable < string [ ] > Parse ( string input )
11
+ var answer2 = Part2 ( data ) ;
12
+
13
+ Console . WriteLine ( answer2 ) ;
14
+
15
+ string [ ] Parse ( string input )
10
16
{
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 ' ) ;
21
18
}
22
19
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 )
24
31
{
25
32
var priorities = rucksacks . Select ( rucksack =>
26
33
{
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 ) ;
33
47
} ) ;
34
48
return priorities . Sum ( ) ;
35
49
}
You can’t perform that action at this time.
0 commit comments