summaryrefslogtreecommitdiff
path: root/2024/PHP/day_04/Position.php
diff options
context:
space:
mode:
authorDJ O'Leary <dijitol@proton.me>2025-03-03 01:14:16 +0100
committerDJ O'Leary <dijitol@proton.me>2025-03-03 01:14:16 +0100
commit6860b6e83f2c6be5e59253105cf397c5b27b1590 (patch)
treeb4dbad23c012f4e547e5df1d24361818cee50b9a /2024/PHP/day_04/Position.php
parent4da9eabd1223682c50209c7659537aaa0867a107 (diff)
feat: Move 2024 php files
Diffstat (limited to '2024/PHP/day_04/Position.php')
-rw-r--r--2024/PHP/day_04/Position.php77
1 files changed, 77 insertions, 0 deletions
diff --git a/2024/PHP/day_04/Position.php b/2024/PHP/day_04/Position.php
new file mode 100644
index 0000000..182da7e
--- /dev/null
+++ b/2024/PHP/day_04/Position.php
@@ -0,0 +1,77 @@
+<?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);
+ }
+}