diff --git a/05/part1.php b/05/part1.php index 01ea8fc..9f73b3b 100644 --- a/05/part1.php +++ b/05/part1.php @@ -6,14 +6,14 @@ $input = array_map(fn($line) => explode(',', str_replace(' -> ', ',', $line)), $ $map = array_fill(0, 1000, array_fill(0, 1000, 0)); foreach ($input as $coordinates) { - if ($coordinates[0] == $coordinates[2]) { + if ($coordinates[0] === $coordinates[2]) { $start = min([$coordinates[1], $coordinates[3]]); $end = max([$coordinates[1], $coordinates[3]]); for ($i = $start; $i <= $end; $i++) { $map[$coordinates[0]][$i]++; } } - if ($coordinates[1] == $coordinates[3]) { + if ($coordinates[1] === $coordinates[3]) { $start = min([$coordinates[0], $coordinates[2]]); $end = max([$coordinates[0], $coordinates[2]]); for ($i = $start; $i <= $end; $i++) { diff --git a/05/part2.php b/05/part2.php new file mode 100644 index 0000000..a841420 --- /dev/null +++ b/05/part2.php @@ -0,0 +1,35 @@ +'; +$input = file('input', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); +$input = array_map(fn($line) => explode(',', str_replace(' -> ', ',', $line)), $input); + +$map = array_fill(0, 1000, array_fill(0, 1000, 0)); + +foreach ($input as $coordinates) { + if ($coordinates[0] === $coordinates[2]) { + $start = min([$coordinates[1], $coordinates[3]]); + $end = max([$coordinates[1], $coordinates[3]]); + for ($i = $start; $i <= $end; $i++) { + $map[$coordinates[0]][$i]++; + } + } + if ($coordinates[1] === $coordinates[3]) { + $start = min([$coordinates[0], $coordinates[2]]); + $end = max([$coordinates[0], $coordinates[2]]); + for ($i = $start; $i <= $end; $i++) { + $map[$i][$coordinates[1]]++; + } + } + if ($coordinates[0] !== $coordinates[2] && $coordinates[1] !== $coordinates[3]) { + $startx = $start = min([$coordinates[0], $coordinates[2]]); + $endx = max([$coordinates[0], $coordinates[2]]); + $starty = $startx === $coordinates[0] ? $coordinates[1] : $coordinates[3]; + $endy = $startx === $coordinates[2] ? $coordinates[1] : $coordinates[3]; + $slope = $starty > $endy ? -1 : 1; + for ($i = $startx, $step = 0; $i <= $endx; $i++, $step++) { + $map[$i][$starty + ($step * $slope)]++; + } + } +} +echo count(array_filter(call_user_func_array('array_merge', $map), fn($el) => $el > 1)); //22213 +