diff options
| author | DJ O'Leary <dijitol@proton.me> | 2025-03-03 01:14:16 +0100 |
|---|---|---|
| committer | DJ O'Leary <dijitol@proton.me> | 2025-03-03 01:14:16 +0100 |
| commit | 6860b6e83f2c6be5e59253105cf397c5b27b1590 (patch) | |
| tree | b4dbad23c012f4e547e5df1d24361818cee50b9a /2024/OCaml/lib | |
| parent | 4da9eabd1223682c50209c7659537aaa0867a107 (diff) | |
feat: Move 2024 php files
Diffstat (limited to '2024/OCaml/lib')
| -rw-r--r-- | 2024/OCaml/lib/day_04/php/Grid.php | 67 | ||||
| -rw-r--r-- | 2024/OCaml/lib/day_04/php/Input.php | 25 | ||||
| -rw-r--r-- | 2024/OCaml/lib/day_04/php/Position.php | 77 | ||||
| -rw-r--r-- | 2024/OCaml/lib/day_04/php/part_01.php | 94 |
4 files changed, 0 insertions, 263 deletions
diff --git a/2024/OCaml/lib/day_04/php/Grid.php b/2024/OCaml/lib/day_04/php/Grid.php deleted file mode 100644 index c0382df..0000000 --- a/2024/OCaml/lib/day_04/php/Grid.php +++ /dev/null @@ -1,67 +0,0 @@ -<?php - -declare(strict_types=1); - -class Grid implements Stringable -{ - /** - * @param string[][] $data - */ - public function __construct(public array $data) {} - - public function __toString(): string - { - $rowToLine = fn(array $row): string => 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; - } -} diff --git a/2024/OCaml/lib/day_04/php/Input.php b/2024/OCaml/lib/day_04/php/Input.php deleted file mode 100644 index f7e03c1..0000000 --- a/2024/OCaml/lib/day_04/php/Input.php +++ /dev/null @@ -1,25 +0,0 @@ -<?php - -declare(strict_types=1); - -class Input -{ - public string $contents; - - public function __construct(private string $fileName) - { - $contents = file_get_contents($this->fileName, use_include_path: true); - $this->contents = $contents === false ? "" : $contents; - } - - public function toGrid(): Grid - { - $lines = explode("\n", $this->contents); - $gridArray = array_map( - callback: fn(string $line): array => str_split(trim($line)), - array: $lines - ); - - return new Grid($gridArray); - } -} diff --git a/2024/OCaml/lib/day_04/php/Position.php b/2024/OCaml/lib/day_04/php/Position.php deleted file mode 100644 index 182da7e..0000000 --- a/2024/OCaml/lib/day_04/php/Position.php +++ /dev/null @@ -1,77 +0,0 @@ -<?php - -declare(strict_types=1); - -class Position implements Stringable -{ - public function __construct(public $x, public $y) {} - - public function __toString(): string - { - return "({$this->x}, {$this->y})"; - } - - /** - * Not validated - */ - public function getNorth(): self - { - return new self($this->x, $this->y - 1); - } - - /** - * Not validated - */ - public function getNorthEast(): self - { - return new self($this->x + 1, $this->y - 1); - } - - /** - * Not validated - */ - public function getEast(): self - { - return new self($this->x + 1, $this->y); - } - - /** - * Not validated - */ - public function getSouthEast(): self - { - return new self($this->x + 1, $this->y + 1); - } - - /** - * Not validated - */ - public function getSouth(): self - { - return new self($this->x, $this->y + 1); - } - - /** - * Not validated - */ - public function getSouthWest(): self - { - return new self($this->x - 1, $this->y + 1); - } - - /** - * Not validated - */ - public function getWest(): self - { - return new self($this->x - 1, $this->y); - } - - /** - * Not validated - */ - public function getNorthWest(): self - { - return new self($this->x - 1, $this->y - 1); - } -} diff --git a/2024/OCaml/lib/day_04/php/part_01.php b/2024/OCaml/lib/day_04/php/part_01.php deleted file mode 100644 index 250da0c..0000000 --- a/2024/OCaml/lib/day_04/php/part_01.php +++ /dev/null @@ -1,94 +0,0 @@ -<?php - -declare(strict_types=1); - -spl_autoload_register(fn(string $className) => require "{$className}.php"); - -// Assumes executed from workspace root -$input = new Input('input/day_04.txt'); -if ($input->contents === "") { - throw new RuntimeException("File not found"); -} - -$grid = $input->toGrid(); - -$matchCount = 0; -foreach ($grid->data as $y => $row) { - foreach ($row as $x => $char) { - if ($char !== 'X') { - continue; - } - - $start = new Position($x, $y); - - $possibleMatches = []; - - $possibleMatches["north"] = $grid->getStringFromPositions([ - $start, - $start->getNorth(), - $start->getNorth()->getNorth(), - $start->getNorth()->getNorth()->getNorth(), - ]); - - $possibleMatches["east"] = $grid->getStringFromPositions([ - $start, - $start->getEast(), - $start->getEast()->getEast(), - $start->getEast()->getEast()->getEast(), - ]); - - $possibleMatches["south"] = $grid->getStringFromPositions([ - $start, - $start->getSouth(), - $start->getSouth()->getSouth(), - $start->getSouth()->getSouth()->getSouth(), - ]); - - $possibleMatches["west"] = $grid->getStringFromPositions([ - $start, - $start->getWest(), - $start->getWest()->getWest(), - $start->getWest()->getWest()->getWest(), - ]); - - $possibleMatches["north-east"] = $grid->getStringFromPositions([ - $start, - $start->getNorthEast(), - $start->getNorthEast()->getNorthEast(), - $start->getNorthEast()->getNorthEast()->getNorthEast(), - ]); - - $possibleMatches["north-west"] = $grid->getStringFromPositions([ - $start, - $start->getNorthWest(), - $start->getNorthWest()->getNorthWest(), - $start->getNorthWest()->getNorthWest()->getNorthWest(), - ]); - - $possibleMatches["south-east"] = $grid->getStringFromPositions([ - $start, - $start->getSouthEast(), - $start->getSouthEast()->getSouthEast(), - $start->getSouthEast()->getSouthEast()->getSouthEast(), - ]); - - $possibleMatches["south-west"] = $grid->getStringFromPositions([ - $start, - $start->getSouthWest(), - $start->getSouthWest()->getSouthWest(), - $start->getSouthWest()->getSouthWest()->getSouthWest(), - ]); - - $matchCount += array_reduce( - array: $possibleMatches, - callback: fn(int $acc, string $possibleMatch): int => match ($possibleMatch) { - "XMAS" => $acc + 1, - default => $acc, - }, - initial: 0, - ); - } -} - -// ANSWER: 2517 -echo $matchCount; |
