From 6860b6e83f2c6be5e59253105cf397c5b27b1590 Mon Sep 17 00:00:00 2001 From: DJ O'Leary Date: Mon, 3 Mar 2025 01:14:16 +0100 Subject: feat: Move 2024 php files --- 2024/PHP/day_04/Grid.php | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 2024/PHP/day_04/Grid.php (limited to '2024/PHP/day_04/Grid.php') diff --git a/2024/PHP/day_04/Grid.php b/2024/PHP/day_04/Grid.php new file mode 100644 index 0000000..c0382df --- /dev/null +++ b/2024/PHP/day_04/Grid.php @@ -0,0 +1,67 @@ + array_reduce( + array: $row, + callback: fn(string $acc, string $character): string => $acc . $character, + initial: "", + ); + + return array_reduce( + array: $this->data, + callback: fn(string $acc, array $row): string => $acc . $rowToLine($row) . PHP_EOL, + initial: "", + ); + } + + public function getCharacterAtPosition(Position $position): string + { + if ($this->isInBounds($position)) { + return $this->data[$position->y][$position->x]; + } + + return "."; + } + + /** + * @param Position[] $positions + */ + public function getStringFromPositions(array $positions): string + { + $characters = array_map( + callback: fn(Position $position): string => $this->getCharacterAtPosition($position), + array: $positions, + ); + + $string = array_reduce( + array: $characters, + callback: fn(string $acc, string $character): string => $acc . $character, + initial: "", + ); + + return $string; + } + + public function isInBounds(Position $position): bool + { + if (!array_key_exists($position->y, $this->data)) { + return false; + } + + if (!array_key_exists($position->x, $this->data[$position->y])) { + return false; + } + + return true; + } +} -- cgit v1.2.3