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"); }
$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;