<?php $lines = ['Comet can fly 14 km/s for 10 seconds, but then must rest for 127 seconds.', 'Dancer can fly 16 km/s for 11 seconds, but then must rest for 162 seconds.']; $lines = file('14.txt'); $race = new Race(); // Add reindeers to race foreach ($lines as $line) { preg_match('/(.*) can fly ([0-9]+) km\\/s for ([0-9]+) seconds, but then must rest for ([0-9]+) seconds\\./', $line, $matches); $race->addReindeer(new Reindeer($matches[1], $matches[2], $matches[3], $matches[4])); } $race->startRace(2503); $winner = $race->getLeaders()[0]; echo array_sum($race->getPoints()); foreach ($race->getReindeers() as $reindeer) { printf("%s: %d km, %d points\n", $reindeer->getName(), $reindeer->getDistanceCovered(), $race->getPointsForReindeer($reindeer)); } echo sprintf('Part 1 answer: %s', $winner->getDistanceCovered()) . PHP_EOL; echo sprintf('Part 2 answer: %s', max($race->getPoints())) . PHP_EOL; class Race { /** @var Reindeer[] */ protected $reindeers = []; /** @var array */ protected $points = []; /** * @param Reindeer $reindeer */ public function addReindeer(Reindeer $reindeer) { $this->reindeers[] = $reindeer; }