@@ -24,15 +24,18 @@ object Day7 {
24
24
}
25
25
26
26
object Work {
27
- def apply (step : Step ): Work = Work (step, baseStepTime + (step - 'A' + 1 ) - 1 )
27
+ def apply (step : Step ): Work = Work (step, baseStepTime + (step - 'A' + 1 ))
28
28
}
29
29
30
30
def tickTime (reqs : Requirements , works : Set [Work ]) = {
31
- val (endWorks, tickWorks) = works.partition(_.timeLeft == 0 )
31
+ val tick = works.map(_.timeLeft).min // tick until first work finishes, nothing interesting happens in between anyway
32
+ val tickedWorks = works.map(_.ticked(tick))
33
+
34
+ val (endWorks, restWorks) = tickedWorks.partition(_.timeLeft == 0 )
32
35
val endSteps = endWorks.map(_.step)
33
36
val restReqs = reqs -- endSteps
34
- val tickedWorks = tickWorks.map(_.ticked( 1 ))
35
- (restReqs, tickedWorks )
37
+
38
+ (restReqs, restWorks, tick )
36
39
}
37
40
38
41
def pickNewWorks (reqs : Requirements , works : Set [Work ]): Set [Work ] = {
@@ -48,13 +51,12 @@ object Day7 {
48
51
}
49
52
50
53
def helper (reqs : Requirements , works : Set [Work ]): Int = {
51
- val (reqs2, works2) = tickTime(reqs, works)
52
- val works3 = works2 ++ pickNewWorks(reqs2, works2)
53
-
54
- if (reqs2.isEmpty && works3.isEmpty)
54
+ if (reqs.isEmpty && works.isEmpty)
55
55
return 0
56
56
57
- 1 + helper(reqs2, works3)
57
+ val works2 = works ++ pickNewWorks(reqs, works)
58
+ val (reqs2, works3, tick) = tickTime(reqs, works2)
59
+ tick + helper(reqs2, works3)
58
60
}
59
61
60
62
helper(reqs, Set .empty)
0 commit comments