-
Notifications
You must be signed in to change notification settings - Fork 0
/
Day9.java
93 lines (73 loc) · 2.42 KB
/
Day9.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
86
87
88
89
90
91
92
93
package io.github.sirnikolai.days;
import io.github.sirnikolai.AbstractSolution;
import java.util.*;
public class Day9 extends AbstractSolution {
public static int cap = 25;
@Override
public void Part1(String input) {
String[] set = input.split("\n");
for(int i = cap; i < set.length; i++) {
long next = Long.parseLong(set[i]);
boolean invalid = true;
for(int j = i - cap; j < i; j++) {
long val1 = Long.parseLong(set[j]);
for(int k = j + 1; k < i; k++) {
long val2 = Long.parseLong(set[k]);
if(val1 + val2 == next) {
invalid = false;
break;
}
}
}
if(invalid) {
System.out.println(next);
return;
}
}
}
@Override
public void Part2(String input) {
String[] set = input.split("\n");
long target = -1;
for(int i = cap; i < set.length; i++) {
long next = Long.parseLong(set[i]);
boolean invalid = true;
for(int j = i - cap; j < i; j++) {
long val1 = Long.parseLong(set[j]);
for(int k = j + 1; k < i; k++) {
long val2 = Long.parseLong(set[k]);
if(val1 + val2 == next) {
invalid = false;
break;
}
}
}
if(invalid) {
target = next;
break;
}
}
for(int i = 0; i < set.length; i++) {
long sum = 0;
for(int j = i; j < set.length; j++) {
sum += Long.parseLong(set[j]);
if(sum == target) {
long[] minmax = getMinMax(set, i, j);
System.out.println(minmax[0] + minmax[1]);
return;
} else if(sum > target) {
break;
}
}
}
}
private long[] getMinMax(String[] strs, int start, int end) {
long min = Long.MAX_VALUE;
long max = Long.MIN_VALUE;
for(int i = start; i <= end; i++) {
min = Math.min(min, Long.parseLong(strs[i]));
max = Math.max(max, Long.parseLong(strs[i]));
}
return new long[]{min, max};
}
}