$reindeerDetails[$name]['curPeriod'] = $reindeer['time']; $reindeerDetails[$name]['inRest'] = false; } } else { $reindeerDetails[$name]['curPeriod']--; $reindeerDetails[$name]['curDistance'] += $reindeer['speed']; if ($reindeerDetails[$name]['curPeriod'] <= 0) { $reindeerDetails[$name]['curPeriod'] = $reindeer['rest']; $reindeerDetails[$name]['inRest'] = true; } } if ($reindeerDetails[$name]['curDistance'] > $curMax) { $curMax = $reindeerDetails[$name]['curDistance']; $curWinner = array($name); } elseif ($reindeerDetails[$name]['curDistance'] == $curMax) { $curWinner[] = $name; } } foreach ($curWinner as $winner) { if (empty($arrPoints[$winner])) { $arrPoints[$winner] = 0; } $arrPoints[$winner]++; } } print_r($arrPoints); } $seconds = 2503; //$seconds = 10; calcWinner(file_get_contents('day14.txt'), $seconds);
{ $reindeerDetails = getReindeerDetails($in); $maxDistance = 0; foreach ($reindeerDetails as $name => $reindeer) { $distance = calcDistance($seconds, $reindeer); if ($distance > $maxDistance) { $maxDistance = $distance; } } echo "Winning reindeer went {$maxDistance}\n"; } function calcDistance($seconds, $reindeer) { $elapsed = 0; $distance = 0; $inRest = false; while ($elapsed < $seconds) { if ($inRest) { $elapsed += $reindeer['rest']; $inRest = false; } else { $timeLeft = min($seconds - $elapsed, $reindeer['time']); $distance += $reindeer['speed'] * $timeLeft; $inRest = true; $elapsed += $timeLeft; } } return $distance; } calcWinner(file_get_contents('day14.txt'), 2503);