// Part 1 ////////////////////////////////////////////////////////////////////// // Initialize position $current = Position::origin(); $positions = [(string) $current]; // Loop through each direction instruction character foreach ($directions as $direction) { $current->moveDirection($direction); $positions[] = (string) $current; } $counts = array_count_values($positions); $houses = count($counts); print "Houses that got at least 1 present: {$houses}."; // Part 2 ////////////////////////////////////////////////////////////////////// // Initialize position $santa = Position::origin(); $santaPositions = [(string) $santa]; $robo = Position::origin(); $roboPositions = [(string) $robo]; // Loop through each direction instruction character foreach ($directions as $i => $direction) { if ($i % 2 == 0) { $robo->moveDirection($direction); $roboPositions[] = (string) $robo; } else { $santa->moveDirection($direction); $santaPositions[] = (string) $santa; } } $counts = array_count_values(array_merge($santaPositions, $roboPositions)); $houses = count($counts); print "Houses that got at least 1 present: {$houses}.";