-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathDay2.java
85 lines (72 loc) · 2 KB
/
Day2.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.sbaars.adventofcode.year16.days;
import com.sbaars.adventofcode.year16.Day2016;
public class Day2 extends Day2016 {
private static final int[][] KEYPAD_1 = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
private static final char[][] KEYPAD_2 = {
{' ', ' ', '1', ' ', ' '},
{' ', '2', '3', '4', ' '},
{'5', '6', '7', '8', '9'},
{' ', 'A', 'B', 'C', ' '},
{' ', ' ', 'D', ' ', ' '}
};
public Day2() {
super(2);
}
public static void main(String[] args) {
new Day2().printParts();
}
private String findCode(int[][] keypad, int startX, int startY) {
StringBuilder code = new StringBuilder();
int x = startX, y = startY;
for (String line : dayStream().toList()) {
for (char move : line.toCharArray()) {
int newX = x, newY = y;
switch (move) {
case 'U' -> newX--;
case 'D' -> newX++;
case 'L' -> newY--;
case 'R' -> newY++;
}
if (newX >= 0 && newX < keypad.length && newY >= 0 && newY < keypad[0].length && keypad[newX][newY] != 0) {
x = newX;
y = newY;
}
}
code.append(keypad[x][y]);
}
return code.toString();
}
private String findCode2(char[][] keypad, int startX, int startY) {
StringBuilder code = new StringBuilder();
int x = startX, y = startY;
for (String line : dayStream().toList()) {
for (char move : line.toCharArray()) {
int newX = x, newY = y;
switch (move) {
case 'U' -> newX--;
case 'D' -> newX++;
case 'L' -> newY--;
case 'R' -> newY++;
}
if (newX >= 0 && newX < keypad.length && newY >= 0 && newY < keypad[0].length && keypad[newX][newY] != ' ') {
x = newX;
y = newY;
}
}
code.append(keypad[x][y]);
}
return code.toString();
}
@Override
public Object part1() {
return findCode(KEYPAD_1, 1, 1);
}
@Override
public Object part2() {
return findCode2(KEYPAD_2, 2, 0);
}
}