year(), $this->day()); $dataExampleFile = sprintf('%s/../data/Y%d/day%d/example.txt', __DIR__, $this->year(), $this->day()); if (file_exists($dataFile)) { $data = file_get_contents($dataFile); if ($data !== false) { $this->data = array_filter(explode(PHP_EOL, $data)); } } if (file_exists($dataExampleFile)) { $data = file_get_contents($dataExampleFile); if ($data !== false) { $this->exampleData = array_filter(explode(PHP_EOL, $data)); } } } public function year(): int { return (int) substr(explode('\\', static::class)[2], 1); } public function day(): int { return (int) substr(explode('\\', static::class)[3], 3); } public function hasData() { return !empty($this->data); } public function hasExampleData() { return !empty($this->exampleData); } #[ArrayShape(['part1' => "int|string", 'part2' => "int|string"])] public function results(bool $useExampleData = true): array { $data = $useExampleData ? $this->exampleData : $this->data; return [ 'part1' => $this->part1($data ?? []), 'part2' => $this->part2($data ?? []), ]; } public function part1Data(bool $useExampleData = true): int|string { $data = $useExampleData ? $this->exampleData : $this->data; return $this->part1($data ?? []); } public function part2Data(bool $useExampleData = true): int|string { $data = $useExampleData ? $this->exampleData : $this->data; return $this->part2($data ?? []); } }