From ffa2cf171ab71ea1a75af75c468449a3837ec8fe Mon Sep 17 00:00:00 2001 From: Clement Desmidt Date: Mon, 6 Dec 2021 15:31:12 +0100 Subject: [PATCH] :construction: Entame le jour 4 --- day_4/part_1.php | 111 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 day_4/part_1.php diff --git a/day_4/part_1.php b/day_4/part_1.php new file mode 100644 index 0000000..4400a3f --- /dev/null +++ b/day_4/part_1.php @@ -0,0 +1,111 @@ + $grid) { + foreach ($grid as $i_row => $row) { + foreach ($row as $cell => $cell_val) { + if ($cell === $number) { + $grids[$i_grid][$i_row][$cell] = 1; + } + } + } + } +} + +/** + * List all unmarked cell from a grid + * + * @param array $grid + * + * @return array + */ +function get_unmarked_from(array $grid): array +{ + $unmarked = []; + foreach ($grid as $row) { + $unmarked = array_merge($unmarked, array_keys(array_filter($row, static function($cell) { + return $cell === 0; + }))); + } + return $unmarked; +} + +/** + * Check if a grid is winning + * + * @param array $grids + * + * @return bool|array + */ +function check_grids(array $grids): bool|array +{ + foreach ($grids as $grid) { + if (check_lines($grid)) { + return get_unmarked_from($grid); + } + $rotated_grid = []; + $i = 0; + while (!empty($grid)) { + foreach ($grid as $j => $row) { + $rotated_grid[$i][array_key_last($row)] = array_pop($row); + $grid[$j] = $row; + if (empty($row)) unset($grid[$j]); + } + $i++; + } + if (check_lines($rotated_grid)) { + return get_unmarked_from($rotated_grid); + } + } + + return false; +} + +/** + * Check if a line is all done + * + * @param array $grid + * + * @return bool|array + */ +function check_lines(array $grid): bool|array +{ + foreach ($grid as $row) { + if (array_sum($row) === 5) { + return true; + } + } + + return false; +} + +foreach ($numbers as $number) { + modify_grids($grids, (int)$number); + $grid = check_grids($grids); + if ($grid !== false) { + echo array_sum($grid) * $number; + break; + } +}