calculateFuel($data[0], forPart2: false); } #[\Override] public function part2(array $data): int { return $this->calculateFuel($data[0], forPart2: true); } private function calculateFuel(string $data, bool $forPart2 = false): int { $crabs = array_map(static fn (string $crab): int => (int) $crab, explode(',', $data)); /** @var array $fuelPerPosition */ $fuelPerPosition = []; $minCrab = min($crabs); $maxCrab = max($crabs); for ($position = $minCrab; $position <= $maxCrab; ++$position) { foreach ($crabs as $crab) { if (!isset($fuelPerPosition[$position])) { $fuelPerPosition[$position] = 0; } $consumption = abs($position - $crab); if ($forPart2) { $consumption = $consumption * ($consumption + 1) / 2; } $fuelPerPosition[$position] += $consumption; } } return (int) min($fuelPerPosition); } }