/
day14-1.php
53 lines (44 loc) · 1.35 KB
/
day14-1.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
function getReindeerDetails($in){
$list = explode("\n",$in);
$pattern = "/^(.*) can fly ([0-9]*) km\/s for ([0-9]*) seconds, but then must rest for ([0-9]*) seconds\.$/";
$details = array();
foreach($list as $item){
if(!$item){
continue;
}
$matches = array();
preg_match($pattern,$item,$matches);
$details[$matches[1]] = array('speed' => $matches[2],'time' => $matches[3], 'rest' => $matches[4]);
}
return $details;
}
function calcWinner($in, $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);