4
4
import com .sbaars .adventofcode .year22 .Day2022 ;
5
5
6
6
import java .io .IOException ;
7
+ import java .util .*;
8
+ import java .util .stream .Collectors ;
9
+
10
+ import static com .sbaars .adventofcode .common .ReadsFormattedString .readString ;
11
+ import static java .lang .Math .toIntExact ;
7
12
8
13
public class Day5 extends Day2022 {
9
14
@@ -16,18 +21,80 @@ public static void main(String[] args) throws IOException {
16
21
d .downloadIfNotDownloaded ();
17
22
// d.downloadExample();
18
23
d .printParts ();
19
- // System.in.read();
24
+ System .in .read ();
20
25
// d.submitPart1();
21
- // d.submitPart2();
26
+ d .submitPart2 ();
22
27
}
23
28
29
+ public record Move (long which , long from , long to ) {}
30
+
24
31
@ Override
25
32
public Object part1 () {
26
- return dayStream ();
33
+ List <Deque <Integer >> stacks = new ArrayList <>();
34
+ for (int i = 1 ; i <=9 ; i ++){
35
+ Deque <Integer > s = new ArrayDeque <>();
36
+ switch (i ){
37
+ case 1 : "NSDCVQT" .chars ().forEach (s ::add ); break ;
38
+ case 2 : "MFV" .chars ().forEach (s ::add ); break ;
39
+ case 3 : "FQWDPNHM" .chars ().forEach (s ::add ); break ;
40
+ case 4 : "DQRTF" .chars ().forEach (s ::add ); break ;
41
+ case 5 : "RFMNQHVB" .chars ().forEach (s ::add ); break ;
42
+ case 6 : "CFGNPWQ" .chars ().forEach (s ::add ); break ;
43
+ case 7 : "WFRLCT" .chars ().forEach (s ::add ); break ;
44
+ case 8 : "TZNS" .chars ().forEach (s ::add ); break ;
45
+ case 9 : "MSDJRQHN" .chars ().forEach (s ::add ); break ;
46
+ }
47
+ stacks .add (s );
48
+ }
49
+
50
+ List <Move > moves = dayStream ().map (String ::trim ).map (s -> readString (s , "move %n from %n to %n" , Move .class )).toList ();
51
+ for (Move m : moves ) {
52
+ for (int i = 0 ; i <m .which ; i ++) {
53
+ int top = stacks .get (toIntExact (m .from -1 )).removeLast ();
54
+ stacks .get (toIntExact (m .to -1 )).addLast (top );
55
+ System .out .println (((char )top )+" moved" );
56
+ }
57
+ }
58
+
59
+ return stacks .stream ().map (Deque ::peekLast ).map (e -> Character .toString ((char )(int )e )).collect (Collectors .joining ());
27
60
}
28
61
62
+ private String toASCII (int value ) {
63
+ int length = 4 ;
64
+ StringBuilder builder = new StringBuilder (length );
65
+ for (int i = length - 1 ; i >= 0 ; i --) {
66
+ builder .append ((char ) ((value >> (8 * i )) & 0xFF ));
67
+ }
68
+ return builder .toString ();
69
+ }
70
+
71
+
29
72
@ Override
30
73
public Object part2 () {
31
- return "" ;
74
+ List <Deque <Integer >> stacks = new ArrayList <>();
75
+ for (int i = 1 ; i <=9 ; i ++){
76
+ Deque <Integer > s = new ArrayDeque <>();
77
+ switch (i ){
78
+ case 1 : "NSDCVQT" .chars ().forEach (s ::add ); break ;
79
+ case 2 : "MFV" .chars ().forEach (s ::add ); break ;
80
+ case 3 : "FQWDPNHM" .chars ().forEach (s ::add ); break ;
81
+ case 4 : "DQRTF" .chars ().forEach (s ::add ); break ;
82
+ case 5 : "RFMNQHVB" .chars ().forEach (s ::add ); break ;
83
+ case 6 : "CFGNPWQ" .chars ().forEach (s ::add ); break ;
84
+ case 7 : "WFRLCT" .chars ().forEach (s ::add ); break ;
85
+ case 8 : "TZNS" .chars ().forEach (s ::add ); break ;
86
+ case 9 : "MSDJRQHN" .chars ().forEach (s ::add ); break ;
87
+ }
88
+ stacks .add (s );
89
+ }
90
+
91
+ List <Move > moves = dayStream ().map (String ::trim ).map (s -> readString (s , "move %n from %n to %n" , Move .class )).toList ();
92
+ for (Move m : moves ) {
93
+ List <Integer > toBeMoved = new ArrayList <>();
94
+ for (int i = 0 ; i <m .which ; i ++) toBeMoved .add (0 , stacks .get (toIntExact (m .from -1 )).removeLast ());
95
+ toBeMoved .forEach (i -> stacks .get (toIntExact (m .to -1 )).addLast (i ));
96
+ }
97
+
98
+ return stacks .stream ().map (Deque ::peekLast ).map (e -> Character .toString ((char )(int )e )).collect (Collectors .joining ());
32
99
}
33
100
}
0 commit comments