Example #1
0
// 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}.";