1
1
package com .sbaars .adventofcode .year18 .days ;
2
2
3
3
import com .sbaars .adventofcode .common .Graph ;
4
+ import com .sbaars .adventofcode .common .Graph .Node ;
5
+ import com .sbaars .adventofcode .common .MutablePair ;
4
6
import com .sbaars .adventofcode .common .Pair ;
5
7
import com .sbaars .adventofcode .year18 .Day2018 ;
6
8
7
9
import java .util .HashSet ;
10
+ import java .util .PriorityQueue ;
8
11
9
12
import static com .sbaars .adventofcode .common .Graph .toGraph ;
13
+ import static com .sbaars .adventofcode .common .MutablePair .pair ;
10
14
import static com .sbaars .adventofcode .util .DataMapper .readString ;
11
15
12
16
public class Day7 extends Day2018 {
@@ -22,7 +26,7 @@ public static void main(String[] args) {
22
26
@ Override
23
27
public Object part1 () {
24
28
var input = input ();
25
- var done = new HashSet <Graph . Node <Character >>();
29
+ var done = new HashSet <Node <Character >>();
26
30
StringBuilder output = new StringBuilder ();
27
31
while (done .size () != input .getNodes ().size ()) {
28
32
var next = input .stream ().filter (n -> !done .contains (n ) && done .containsAll (n .parents ())).sorted ().findFirst ().get ();
@@ -34,7 +38,23 @@ public Object part1() {
34
38
35
39
@ Override
36
40
public Object part2 () {
37
- return "" ;
41
+ var input = input ();
42
+ var done = new HashSet <Node <Character >>();
43
+ var queue = new PriorityQueue <MutablePair <Integer , Node <Character >>>(5 );
44
+ int total = 0 ;
45
+ while (done .size () != input .getNodes ().size ()) {
46
+ var next = input .stream ().filter (n -> !done .contains (n ) && queue .stream ().noneMatch (p -> p .b ().equals (n )) && done .containsAll (n .parents ())).sorted ().findFirst ();
47
+ if (next .isEmpty () || queue .size () == 5 ) {
48
+ var mins = queue .poll ();
49
+ total += mins .a ();
50
+ queue .forEach (p -> p .setA (p .a () - mins .a ()));
51
+ done .add (mins .b ());
52
+ } else {
53
+ var n = next .get ();
54
+ queue .add (pair (n .data () - 'A' + 61 , n ));
55
+ }
56
+ }
57
+ return total ;
38
58
}
39
59
40
60
private Graph <Character > input () {
0 commit comments