@@ -15,35 +15,7 @@ public object PartOne(string input)
15
15
hand . Type = GetHandType ( hand . Cards ) ;
16
16
}
17
17
18
- var handsOrdered = hands . GroupBy ( h => h . Type )
19
- . OrderBy ( t => ( int ) t . Key )
20
- . ToList ( ) ;
21
-
22
- var rank = 1 ;
23
- var result = 0 ;
24
- foreach ( var orderHand in handsOrdered )
25
- {
26
- if ( orderHand . Count ( ) == 1 )
27
- {
28
- result += orderHand . First ( ) . Bid * rank ;
29
- rank ++ ;
30
- }
31
- else
32
- {
33
- // sort all hands by first card of each hand
34
- var sortedHands = orderHand . OrderBy ( h => h . Cards . First ( ) . Strength ) . ToList ( ) ;
35
- sortedHands . Sort ( new HandComparer ( ) ) ;
36
-
37
- // Display sorted hands
38
- foreach ( var hand in sortedHands )
39
- {
40
- result += hand . Bid * rank ;
41
- rank ++ ;
42
- }
43
- }
44
- }
45
-
46
- return result ;
18
+ return ComputeFinalScore ( hands ) ;
47
19
}
48
20
49
21
public object PartTwo ( string input )
@@ -55,6 +27,11 @@ public object PartTwo(string input)
55
27
hand . Type = GetHandType ( hand . Cards , isPart2 : true ) ;
56
28
}
57
29
30
+ return ComputeFinalScore ( hands ) ;
31
+ }
32
+
33
+ private static int ComputeFinalScore ( IEnumerable < Hand > hands )
34
+ {
58
35
var handsOrdered = hands . GroupBy ( h => h . Type )
59
36
. OrderBy ( t => ( int ) t . Key )
60
37
. ToList ( ) ;
@@ -102,8 +79,7 @@ private static List<Hand> ParseInput(string input, bool isPart2 = false)
102
79
cards . Add ( new Card
103
80
{
104
81
Name = card . ToString ( ) ,
105
- Strength = isPart2 ? GetCardStrengthPart2 ( card ) : GetCardStrength ( card ) ,
106
- Index = i
82
+ Strength = isPart2 ? GetCardStrengthPart2 ( card ) : GetCardStrength ( card )
107
83
} ) ;
108
84
}
109
85
@@ -143,7 +119,7 @@ private static int GetCardStrengthPart2(char card)
143
119
} ;
144
120
}
145
121
146
- private static Type GetHandType ( List < Card > cards , bool isPart2 = false )
122
+ private static Type GetHandType ( IReadOnlyCollection < Card > cards , bool isPart2 = false )
147
123
{
148
124
var cardGroups = cards . GroupBy ( card => card . Name ) . ToList ( ) ;
149
125
var cardGroupCount = cardGroups . Count ;
@@ -183,8 +159,8 @@ 3 when cardGroups.Any(group => group.Count() == 3) => Type.ThreeOfAKind,
183
159
184
160
public class Hand
185
161
{
186
- public List < Card > Cards { get ; set ; }
187
- public int Bid { get ; set ; }
162
+ public List < Card > Cards { get ; init ; }
163
+ public int Bid { get ; init ; }
188
164
public Type Type { get ; set ; }
189
165
}
190
166
@@ -201,9 +177,8 @@ public enum Type
201
177
202
178
public class Card
203
179
{
204
- public string Name { get ; set ; }
205
- public int Strength { get ; set ; }
206
- public int Index { get ; set ; }
180
+ public string Name { get ; init ; }
181
+ public int Strength { get ; init ; }
207
182
}
208
183
209
184
public class HandComparer : IComparer < Hand >
0 commit comments