✨ Finit le jour 9
This commit is contained in:
parent
592bc62c63
commit
23a90beb38
99
day_9/part_2.php
Normal file
99
day_9/part_2.php
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$grid = array_map(static function ($row) {
|
||||||
|
return str_split($row);
|
||||||
|
}, explode("\n", file_get_contents('./input.txt')));
|
||||||
|
|
||||||
|
$points_in_bassin = [];
|
||||||
|
$low_points = [];
|
||||||
|
|
||||||
|
foreach ($grid as $i => $row) {
|
||||||
|
foreach ($row as $j => $cell) {
|
||||||
|
$count = 0;
|
||||||
|
if (!array_key_exists($i - 1, $grid) || $grid[$i - 1][$j] > $cell) {
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
if (!array_key_exists($i + 1, $grid) || $grid[$i + 1][$j] > $cell) {
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
if (!array_key_exists($j - 1, $row) || $row[$j - 1] > $cell) {
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
if (!array_key_exists($j + 1, $row) || $row[$j + 1] > $cell) {
|
||||||
|
$count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($count === 4) {
|
||||||
|
$low_points[] = [$i, $j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($low_points as $i => $low_point) {
|
||||||
|
$points_in_bassin[$i] = build_bassin($grid, [$low_point],0, [$low_point]);
|
||||||
|
}
|
||||||
|
|
||||||
|
rsort($points_in_bassin);
|
||||||
|
|
||||||
|
echo array_product(array_slice($points_in_bassin, 0, 3));
|
||||||
|
|
||||||
|
function build_bassin($grid, $neighbours, $count_neighbours = 0, $current_bassin = [])
|
||||||
|
{
|
||||||
|
$step = 0;
|
||||||
|
$new_neighbours = [];
|
||||||
|
foreach ($neighbours as $value) {
|
||||||
|
[$i, $j] = $value;
|
||||||
|
|
||||||
|
if (
|
||||||
|
isset($grid[$i][$j - 1]) &&
|
||||||
|
$grid[$i][$j - 1] != 9 &&
|
||||||
|
!in_array([$i, $j - 1], $current_bassin)
|
||||||
|
) {
|
||||||
|
$step++;
|
||||||
|
$count_neighbours++;
|
||||||
|
$current_bassin[] = [$i, $j - 1];
|
||||||
|
$new_neighbours[] = [$i, $j - 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
isset($grid[$i][$j + 1]) &&
|
||||||
|
$grid[$i][$j + 1] != 9 &&
|
||||||
|
!in_array([$i, $j + 1], $current_bassin)
|
||||||
|
) {
|
||||||
|
$step++;
|
||||||
|
$count_neighbours++;
|
||||||
|
$current_bassin[] = [$i, $j + 1];
|
||||||
|
$new_neighbours[] = [$i, $j + 1];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
isset($grid[$i - 1][$j]) &&
|
||||||
|
$grid[$i - 1][$j] != 9 &&
|
||||||
|
!in_array([$i - 1, $j], $current_bassin)
|
||||||
|
) {
|
||||||
|
$step++;
|
||||||
|
$count_neighbours++;
|
||||||
|
$current_bassin[] = [$i - 1, $j];
|
||||||
|
$new_neighbours[] = [$i - 1, $j];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
isset($grid[$i + 1][$j]) &&
|
||||||
|
$grid[$i + 1][$j] != 9 &&
|
||||||
|
!in_array([$i + 1, $j], $current_bassin)
|
||||||
|
) {
|
||||||
|
$step++;
|
||||||
|
$count_neighbours++;
|
||||||
|
$current_bassin[] = [$i + 1, $j];
|
||||||
|
$new_neighbours[] = [$i + 1, $j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($step !== 0) {
|
||||||
|
return build_bassin($grid, $new_neighbours, $count_neighbours, $current_bassin, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $count_neighbours + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user