@@ -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 ++) {
0 commit comments