Skip to content

Commit aa93ac0

Browse files
committed
Day 5 2022
1 parent 01ad941 commit aa93ac0

File tree

2 files changed

+574
-4
lines changed

2 files changed

+574
-4
lines changed

src/main/java/com/sbaars/adventofcode/year22/days/Day5.java

Lines changed: 71 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
import com.sbaars.adventofcode.year22.Day2022;
55

66
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;
712

813
public class Day5 extends Day2022 {
914

@@ -16,18 +21,80 @@ public static void main(String[] args) throws IOException {
1621
d.downloadIfNotDownloaded();
1722
// d.downloadExample();
1823
d.printParts();
19-
// System.in.read();
24+
System.in.read();
2025
// d.submitPart1();
21-
// d.submitPart2();
26+
d.submitPart2();
2227
}
2328

29+
public record Move(long which, long from, long to) {}
30+
2431
@Override
2532
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());
2760
}
2861

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+
2972
@Override
3073
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());
3299
}
33100
}

0 commit comments

Comments
 (0)