getList($data); $score = 0; foreach ($listLeft as $index => $left) { $right = $listRight[$index]; $score += abs($left - $right); } return $score; } public function part2(array $data): int { $score = 0; [$listLeft, $listRight] = $this->getList($data); foreach ($listLeft as $index => $left) { $right = count(array_filter($listRight, fn ($x) => $x === $left)); if ($right > 0) { $score += $left * $right; } } return $score; } /** * @param array $data * * @return array */ private function getList(array $data): array { $listLeft = []; $listRight = []; foreach ($data as $x) { [$a1, $_, $_, $b1] = explode(' ', $x); $listLeft[] = (int) $a1; $listRight[] = (int) $b1; } sort($listLeft); sort($listRight); return [$listLeft, $listRight]; } }