Day02 files
Signed-off-by: Eoghan Conlon <git@eoghanconlon.ie>
This commit is contained in:
parent
5a2650099e
commit
d544a7b5c7
2 changed files with 202 additions and 1 deletions
174
src/Day02.java
Normal file
174
src/Day02.java
Normal file
|
@ -0,0 +1,174 @@
|
||||||
|
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];
|
||||||
|
for(int i = 0, j = 0; i < readings.length; i += 1){
|
||||||
|
if(i != danger){
|
||||||
|
reading_cut[j] = readings[i];
|
||||||
|
j += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(safe_p2(reading_cut) == -1){
|
||||||
|
safeReadings += 1;
|
||||||
|
} else {
|
||||||
|
for(int i = 0, j = 0; i < readings.length; i += 1){
|
||||||
|
if(i != danger - 1){
|
||||||
|
reading_cut[j] = readings[i];
|
||||||
|
j += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(safe_p2(reading_cut) == -1){
|
||||||
|
safeReadings += 1;
|
||||||
|
} else {
|
||||||
|
safe -= 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 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 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 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