public function __invoke()
 {
     $elfCalculator = new ElfCalculator();
     $deliverer = new PresentDeliverer($elfCalculator);
     $input = 34000000;
     $house = 600000;
     while (true) {
         if ($deliverer->giftsDeliveredToHouse($house) >= $input) {
             break;
         }
         $house++;
     }
     $this->write("House # {$house} got {$input} gifts");
 }
 public function __invoke()
 {
     $elfCalculator = new LimitedHousesElfCalculator();
     $deliverer = new PresentDeliverer($elfCalculator, 11);
     $input = 34000000;
     $house = 600000;
     $maxHousesPerElf = 50;
     while (true) {
         if ($deliverer->giftsDeliveredToHouseWithMaxPerElf($house, $maxHousesPerElf) >= $input) {
             break;
         }
         $house++;
     }
     $this->write("House # {$house} got {$input} gifts");
 }
Example #3
0
                $this->positions[$who][0]++;
                break;
            case '<':
                $this->positions[$who][0]--;
                break;
        }
    }
    /**
     * Delivers a present at the current position on the grid
     */
    private function deliverPresent($who)
    {
        $position = $this->positions[$who];
        $key = implode(':', $position);
        if (!isset($this->presentCount[$key])) {
            $this->presentCount[$key] = 0;
        }
        $this->presentCount[$key]++;
    }
}
$input = file_get_contents('3.txt');
$presentDeliverer1 = new PresentDeliverer(['santa']);
$presentDeliverer2 = new PresentDeliverer(['santa', 'robo']);
/*print_r($presentDeliverer1->doDelivery('>'));
print_r($presentDeliverer1->doDelivery('^>v<'));
print_r($presentDeliverer1->doDelivery('^v^v^v^v^v'));
print_r($presentDeliverer2->doDelivery('^v'));
print_r($presentDeliverer2->doDelivery('^>v<'));
print_r($presentDeliverer2->doDelivery('^v^v^v^v^v'));*/
echo sprintf('Part 1 answer: %s', count($presentDeliverer1->doDelivery($input))) . PHP_EOL;
echo sprintf('Part 2 answer: %s', count($presentDeliverer2->doDelivery($input))) . PHP_EOL;