Hola,
aún no he resuelto el problema del día anterior, no sé muy bien como voy a plantear la solución, pero de momento tengo resuelto el de hoy, mi solución en java:
package aoc_2022;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Day8 {
private static final File INPUT = new File("2022_inputs/2022_day8_input.txt");
private int [][] matrix;
private int rows, colums, counter;
private List<Integer> trees;
Day8(){
this.colums = getColums();
this.rows = getRows();
this.matrix = getMatrix();
this.counter = 0;
trees = new ArrayList<>();
}
private int getColums(){
int colums = 0;
try(BufferedReader br = new BufferedReader(new FileReader(INPUT))){
colums = br.readLine().length();
}catch (IOException e){
System.err.println("Error getting number of colums");
}
return colums;
}
private int getRows(){
int rows = 0;
String line = "";
try(BufferedReader br = new BufferedReader(new FileReader(INPUT))){
while((line = br.readLine()) != null){
rows++;
}
}catch(IOException e){
System.err.println("Error getting number of rows.");
}
return rows;
}
private int [][] getMatrix(){
String line = "";
int r = 0;
int [][] matrix = new int[rows][colums];
try(BufferedReader br = new BufferedReader(new FileReader(INPUT))){
while((line = br.readLine()) != null){
for (int i = 0; i < line.length(); i++) {
matrix[r][i] = line.charAt(i) - '0';
}
r++;
}
}catch(IOException e){
System.err.println("Error getting matrix.");
}
return matrix;
}
private void printMatrix(){
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
System.out.println(matrix[i][j]);
}
}
}
private boolean checkUp(int i, int j){
int value = matrix[i][j];
for (int k = i-1; k >= 0 ; k--) {
if(matrix[k][j] >= value)
return true;
}
return false;
}
private int checkUp2(int i, int j){
int c = 0;
int value = matrix[i][j];
for (int k = i-1; k >= 0 ; k--) {
c++;
if(matrix[k][j] >= value) {
return c;
}
}
return c;
}
private boolean checkRight(int i, int j){
int value = matrix[i][j];
for (int k = j+1; k < matrix[0].length ; k++) {
if(matrix[i][k] >= value)
return true;
}
return false;
}
private int checkRight2(int i, int j){
int c = 0;
int value = matrix[i][j];
for (int k = j+1; k < matrix[0].length ; k++) {
c++;
if(matrix[i][k] >= value)
return c;
}
return c;
}
private boolean checkDown(int i, int j){
int value = matrix[i][j];
for (int k = i+1; k < matrix.length ; k++) {
if(matrix[k][j] >= value)
return true;
}
return false;
}
private int checkDown2(int i,int j){
int c = 0;
int value = matrix[i][j];
for (int k = i+1; k < matrix.length ; k++) {
c++;
if(matrix[k][j] >= value)
return c;
}
return c;
}
private boolean checkLeft(int i, int j){
int value = matrix[i][j];
for (int k = j-1; k >= 0 ; k--) {
if(matrix[i][k] >= value)
return true;
}
return false;
}
private int checkLeft2(int i, int j){
int c = 0;
int value = matrix[i][j];
for (int k = j-1; k >= 0 ; k--) {
c++;
if(matrix[i][k] >= value)
return c;
}
return c;
}
private void solve(){
for (int i = 1; i <matrix.length-1 ; i++) {
for (int j = 1; j < matrix[0].length-1; j++) {
if(!checkUp(i,j) || !checkDown(i,j) || !checkRight(i,j) || !checkLeft(i,j))
this.counter++;
}
}
}
private void solvePart2(){
int c = 0;
for (int i = 1; i <matrix.length-1 ; i++) {
for (int j = 1; j < matrix[0].length-1; j++) {
c = checkUp2(i,j) * checkLeft2(i,j) * checkDown2(i,j) * checkRight2(i,j);
trees.add(c);
}
}
}
public static void main(String[] args) {
Day8 d8 = new Day8();
d8.solve();
System.out.println(d8.counter + ((2*d8.matrix.length + 2*d8.matrix[0].length)-4));
d8.solvePart2();
System.out.println(Collections.max(d8.trees));
}
}