Skip to content

Commit 7239eb4

Browse files
committed
refactor: clean day 12 code
1 parent a5e4027 commit 7239eb4

File tree

2 files changed

+19
-35
lines changed

2 files changed

+19
-35
lines changed

src/main/java/com/adventofcode/flashk/day12/GardenGroups.java

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -42,34 +42,14 @@ public long solveA() {
4242

4343
public long solveB() {
4444
findRegions();
45-
46-
long price = 0;
47-
48-
// Nueva idea:
49-
// Esta idea se parece más a como se calculan las vallas en la primera fila.
50-
// ¿cuál es la diferencia?
51-
//
52-
// supongamos una fila como ABAB, esto son 4 regiones diferentes, pero esto es lo de menos.
53-
//
54-
// En vez de centrarnos en una región para calcular su precio, recorreremos el array por filas:
55-
// - Nos situamos en una celda del mapa.
56-
// - Si esta celda NO pertenece a la misma región que a la anterior, le decimos a su región que tiene un lado más.
57-
// - Si esta celda pertenece a la misma región que la celda anterior, entonces podemos obviarla.
58-
//
59-
// Una vez terminado el array por filas, hacemos el mismo proceso por columnas, para así contar los otros lados.
60-
61-
// Posibles casos eje: la primera celda y la última de cada fila/columna, ¿cuántos lados hay que contar?
62-
6345
countHorizontalSides();
6446
countVerticalSides();
65-
6647
return calculatePriceB();
6748
}
6849

6950
private int calculatePriceB() {
7051
int price = 0;
7152
for(Map.Entry<Integer,Integer> regionArea : regionAreas.entrySet()) {
72-
System.out.println("Region: " + regionArea.getKey() + " - Area: " + regionArea.getValue() + " - Sides: "+ regionSides.get(regionArea.getKey()));
7353
price += regionArea.getValue() * regionSides.get(regionArea.getKey());
7454
}
7555

@@ -88,8 +68,8 @@ private void countHorizontalSides() {
8868
GardenPlot topPlot = getUpPlot(row, col).orElse(noPlot());
8969
GardenPlot topLeftPlot = getUpLeftPlot(row,col).orElse(noPlot());
9070

91-
if(checkAdjacents(leftPlot, topPlot, currentPlot)
92-
|| checkAdjacentsAndDiagonal(leftPlot, topPlot, topLeftPlot, currentPlot)) {
71+
if(checkAdjacents(leftPlot, topPlot, currentPlot) ||
72+
checkAdjacentsAndDiagonalH(leftPlot, topPlot, topLeftPlot, currentPlot)) {
9373
addSides(currentPlot);
9474
}
9575

@@ -98,14 +78,14 @@ private void countHorizontalSides() {
9878
GardenPlot downLeftPlot = getDownLeftPlot(row, col).orElse(noPlot);
9979

10080
if(checkAdjacents(leftPlot, downPlot, currentPlot) ||
101-
checkAdjacentsAndDiagonal(leftPlot, downPlot, downLeftPlot, currentPlot)) {
81+
checkAdjacentsAndDiagonalH(leftPlot, downPlot, downLeftPlot, currentPlot)) {
10282
addSides(currentPlot);
10383
}
10484
}
10585
}
10686
}
10787

108-
private boolean checkAdjacents(GardenPlot left, GardenPlot topDown, GardenPlot current) {
88+
private boolean checkAdjacents(GardenPlot adjacentHorizontal, GardenPlot adjacentVertical, GardenPlot current) {
10989

11090
// Cases:
11191
// XX AX
@@ -114,10 +94,12 @@ private boolean checkAdjacents(GardenPlot left, GardenPlot topDown, GardenPlot c
11494
// XA< XA<
11595
// XX AX
11696

117-
return (left.getRegionId() != current.getRegionId() && topDown.getRegionId() != current.getRegionId());
97+
return (adjacentHorizontal.getRegionId() != current.getRegionId() &&
98+
adjacentVertical.getRegionId() != current.getRegionId());
11899
}
119100

120-
private boolean checkAdjacentsAndDiagonal(GardenPlot left, GardenPlot topDown, GardenPlot diagonal, GardenPlot current) {
101+
private boolean checkAdjacentsAndDiagonalH(GardenPlot adjacentHorizontal, GardenPlot adjacentVertical,
102+
GardenPlot diagonal, GardenPlot current) {
121103

122104
// Cases:
123105

@@ -129,20 +111,24 @@ private boolean checkAdjacentsAndDiagonal(GardenPlot left, GardenPlot topDown, G
129111
// -
130112
// AX
131113

132-
return (left.getRegionId() == current.getRegionId() &&
133-
topDown.getRegionId() != current.getRegionId() &&
114+
return (adjacentHorizontal.getRegionId() == current.getRegionId() &&
115+
adjacentVertical.getRegionId() != current.getRegionId() &&
134116
diagonal.getRegionId() == current.getRegionId());
135117
}
136118

137-
private boolean checkAdjacentsAndDiagonalV(GardenPlot top, GardenPlot left, GardenPlot upLeft, GardenPlot current) {
119+
private boolean checkAdjacentsAndDiagonalV(GardenPlot adjacentVertical, GardenPlot adjacentHorizontal,
120+
GardenPlot diagonal, GardenPlot current) {
138121
// Cases:
139122

140123
// A A
141124
// X|A <
142125

143-
return top.getRegionId() == current.getRegionId() &&
144-
left.getRegionId() != current.getRegionId() &&
145-
upLeft.getRegionId() == current.getRegionId();
126+
// A A <
127+
// X|A
128+
129+
return adjacentVertical.getRegionId() == current.getRegionId() &&
130+
adjacentHorizontal.getRegionId() != current.getRegionId() &&
131+
diagonal.getRegionId() == current.getRegionId();
146132

147133
}
148134

@@ -183,7 +169,6 @@ private Optional<GardenPlot> getDownLeftPlot(int row, int col) {
183169
return (row+1 < rows && col > 0) ? Optional.of(map[row+1][col-1]) : Optional.empty();
184170
}
185171

186-
187172
private void countVerticalSides() {
188173

189174
for(int col = 0; col < cols; col++) {

src/test/java/com/adventofcode/flashk/day12/Day12Test.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121

2222
@DisplayName(TestDisplayName.DAY_12)
2323
@TestMethodOrder(OrderAnnotation.class)
24-
@Disabled // TODO Remove comment when implemented
25-
public class Day12Test extends PuzzleTest {
24+
class Day12Test extends PuzzleTest {
2625

2726
private static final String INPUT_FOLDER = TestFolder.DAY_12;
2827

0 commit comments

Comments
 (0)