-
Notifications
You must be signed in to change notification settings - Fork 0
/
Day5.java
81 lines (61 loc) · 1.98 KB
/
Day5.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
package io.github.sirnikolai.days;
import io.github.sirnikolai.AbstractSolution;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Day5 extends AbstractSolution {
@Override
public void Part1(String input) {
String[] lst = input.split("\n");
int max = 0;
for(String s : lst) {
String first = s.substring(0,7);
String sec = s.substring(7);
int col = binarySearchFB(first, 0, 0, 127);
int row = binarySearchLR(sec, 0, 0, 7);
max = Math.max(max, col * 8 + row);
}
System.out.println(max);
}
@Override
public void Part2(String input) {
String[] lst = input.split("\n");
List<Integer> list = new ArrayList<>();
for(String s : lst) {
String first = s.substring(0,7);
String sec = s.substring(7);
int col = binarySearchFB(first, 0, 0, 127);
int row = binarySearchLR(sec, 0, 0, 7);
int val = col * 8 + row;
list.add(col * 8 + row);
}
Collections.sort(list);
for(int i = 1; i < list.size(); i++) {
if(list.get(i) - list.get(i-1) != 1) {
System.out.println(list.get(i) + " " + list.get(i-1));
}
}
}
private int binarySearchFB(String s, int idx, int l, int r) {
if(idx == s.length()) {
return r;
}
int mid = l + (r - l) / 2;
if(s.charAt(idx) == 'F') {
return binarySearchFB(s, idx+1, l, mid);
} else {
return binarySearchFB(s, idx+1, mid, r);
}
}
private int binarySearchLR(String s, int idx, int l, int r) {
if(idx == s.length()) {
return r;
}
int mid = l + (r - l) / 2;
if(s.charAt(idx) == 'L') {
return binarySearchLR(s, idx+1, l, mid);
} else {
return binarySearchLR(s, idx+1, mid, r);
}
}
}