Day02 #2
2 changed files with 194 additions and 1 deletions
166
src/Day02.java
Normal file
166
src/Day02.java
Normal file
|
@ -0,0 +1,166 @@
|
|||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Day02 extends Input{
|
||||
private Input input;
|
||||
|
||||
private ArrayList<int[]> sample;
|
||||
private ArrayList<int[]> actual;
|
||||
|
||||
public Day02() throws IOException {
|
||||
this.input = new Input();
|
||||
this.input.init("in/Day02");
|
||||
}
|
||||
|
||||
public int part1Sample(){
|
||||
int safeReadings = 0;
|
||||
|
||||
this.sample = new ArrayList<>();
|
||||
|
||||
for(String s1: this.input.getSample_input()){
|
||||
String[] teamp_arr = s1.split(" ");
|
||||
int[] temp_intArr = new int[teamp_arr.length];
|
||||
for(int i = 0; i < temp_intArr.length; i += 1){
|
||||
temp_intArr[i] = Integer.parseInt(teamp_arr[i]);
|
||||
}
|
||||
this.sample.add(temp_intArr);
|
||||
}
|
||||
|
||||
return p1_work(safeReadings, sample);
|
||||
}
|
||||
|
||||
public int part1(){
|
||||
int safeReadings = 0;
|
||||
|
||||
this.actual = new ArrayList<>();
|
||||
|
||||
for(String s1: this.input.getInput()){
|
||||
String[] teamp_arr = s1.split(" ");
|
||||
int[] temp_intArr = new int[teamp_arr.length];
|
||||
for(int i = 0; i < temp_intArr.length; i += 1){
|
||||
temp_intArr[i] = Integer.parseInt(teamp_arr[i]);
|
||||
}
|
||||
this.actual.add(temp_intArr);
|
||||
}
|
||||
|
||||
return p1_work(safeReadings, actual);
|
||||
}
|
||||
|
||||
private int p1_work(int safeReadings, ArrayList<int[]> actual) {
|
||||
for(int[] readings : actual){
|
||||
int i = 0;
|
||||
int j = 1;
|
||||
boolean increasing = readings[i] < readings[j];
|
||||
boolean safe = true;
|
||||
while(j < readings.length && safe){
|
||||
int temp = readings[i] - readings[j];
|
||||
if((increasing && ((temp < -3) || (temp > -1))) || (!increasing && ((temp < 1) || (temp > 3)))){
|
||||
safe = false;
|
||||
}
|
||||
j += 1;
|
||||
i += 1;
|
||||
}
|
||||
if(safe){
|
||||
safeReadings += 1;
|
||||
}
|
||||
}
|
||||
|
||||
return safeReadings;
|
||||
}
|
||||
|
||||
public int part2Sample(){
|
||||
int safeReadings = 0;
|
||||
|
||||
this.sample = new ArrayList<>();
|
||||
|
||||
for(String s1: this.input.getSample_input()){
|
||||
String[] teamp_arr = s1.split(" ");
|
||||
int[] temp_intArr = new int[teamp_arr.length];
|
||||
for(int i = 0; i < temp_intArr.length; i += 1){
|
||||
temp_intArr[i] = Integer.parseInt(teamp_arr[i]);
|
||||
}
|
||||
this.sample.add(temp_intArr);
|
||||
}
|
||||
|
||||
for(int[] readings : this.sample){
|
||||
safeReadings = getSafeReadings(safeReadings, readings);
|
||||
}
|
||||
|
||||
return safeReadings;
|
||||
}
|
||||
|
||||
public int part2(){
|
||||
int safeReadings = 0;
|
||||
|
||||
this.actual = new ArrayList<>();
|
||||
|
||||
for(String s1: this.input.getInput()){
|
||||
String[] teamp_arr = s1.split(" ");
|
||||
int[] temp_intArr = new int[teamp_arr.length];
|
||||
for(int i = 0; i < temp_intArr.length; i += 1){
|
||||
temp_intArr[i] = Integer.parseInt(teamp_arr[i]);
|
||||
}
|
||||
this.actual.add(temp_intArr);
|
||||
}
|
||||
|
||||
for(int[] readings : this.actual){
|
||||
safeReadings = getSafeReadings(safeReadings, readings);
|
||||
}
|
||||
|
||||
return safeReadings;
|
||||
}
|
||||
|
||||
private int getSafeReadings(int safeReadings, int[] readings) {
|
||||
int safe = 1;
|
||||
int oldSafeRead = safeReadings;
|
||||
while(safe >= 0 && oldSafeRead == safeReadings){
|
||||
int danger = safe_p2(readings);
|
||||
if(danger == -1){
|
||||
safeReadings += 1;
|
||||
} else {
|
||||
safe -= 1;
|
||||
int[] reading_cut = new int[readings.length - 1];
|
||||
while(danger >= 0 && oldSafeRead == safeReadings){
|
||||
for(int a = 0, b = 0; a < readings.length; a += 1){
|
||||
if(a != danger){
|
||||
reading_cut[b] = readings[a];
|
||||
b += 1;
|
||||
}
|
||||
}
|
||||
if(safe_p2(reading_cut) == -1){
|
||||
safeReadings += 1;
|
||||
} else {
|
||||
danger -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return safeReadings;
|
||||
}
|
||||
|
||||
public int safe_p2(int[] readings){
|
||||
int safe = 0;
|
||||
boolean increasing = readings[0] < readings[1];
|
||||
int i = 0;
|
||||
int j = 1;
|
||||
while(j < readings.length){
|
||||
int diff = readings[i] - readings[j];
|
||||
if(increasing && ((diff < -3) || (diff > -1))){
|
||||
break;
|
||||
} else if (!increasing && ((diff < 1) || (diff > 3))) {
|
||||
break;
|
||||
} else {
|
||||
j += 1;
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if(j < readings.length){
|
||||
safe = j;
|
||||
} else {
|
||||
safe = -1;
|
||||
}
|
||||
|
||||
return safe;
|
||||
}
|
||||
}
|
|
@ -28,6 +28,33 @@ public class Main {
|
|||
System.out.printf("Part 1 sample is: %d (%dms)\n", sample_d1_p1_answer, day01_p1_sample);
|
||||
System.out.printf("Part 1 answer is: %d (%dms)\n", d1_p1_answer, day01_p1);
|
||||
System.out.printf("Part 2 sample answer is: %d (%dms)\n", sample_d1_p2_answer, day01_p2_sample);
|
||||
System.out.printf("Part 2 answer is: %d (%dms)", d1_p2_answer, day01_p2);
|
||||
System.out.printf("Part 2 answer is: %d (%dms)\n", d1_p2_answer, day01_p2);
|
||||
|
||||
System.out.println("\nDay 2:");
|
||||
start = System.currentTimeMillis();
|
||||
Day02 day02 = new Day02();
|
||||
long day02_init = System.currentTimeMillis() - start;
|
||||
|
||||
start = System.currentTimeMillis();
|
||||
int d2_p1_sample = day02.part1Sample();
|
||||
long day02_p1_sample = System.currentTimeMillis() - start;
|
||||
|
||||
start = System.currentTimeMillis();
|
||||
int d2_p1 = day02.part1();
|
||||
long day02_p1 = System.currentTimeMillis() - start;
|
||||
|
||||
start = System.currentTimeMillis();
|
||||
int d2_p2_sample = day02.part2Sample();
|
||||
long day02_p2_sample = System.currentTimeMillis() - start;
|
||||
|
||||
start = System.currentTimeMillis();
|
||||
int d2_p2 = day02.part2();
|
||||
long day02_p2 = System.currentTimeMillis() - start;
|
||||
|
||||
System.out.printf("Day 2 init took %dms\n", day02_init);
|
||||
System.out.printf("Part 1 sample = %d (%dms)\n", d2_p1_sample, day02_p1_sample);
|
||||
System.out.printf("Part 1 answer = %d (%dms)\n", d2_p1, day02_p1);
|
||||
System.out.printf("Part 2 sample = %d (%dms)\n", d2_p2_sample, day02_p2_sample);
|
||||
System.out.printf("Part 2 answer = %d (%dms)\n", d2_p2, day02_p2);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue