-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday14.php
More file actions
executable file
·94 lines (67 loc) · 2.11 KB
/
day14.php
File metadata and controls
executable file
·94 lines (67 loc) · 2.11 KB
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
ini_set("memory_limit","256M");
$inputFile = fopen("input14.txt",'r');
function getFlyiedDistance($time, $reindeer) {
$numberOfCycles = floor($time / ($reindeer["flyTime"] + $reindeer["restTime"]));
$leftSeconds = $time % ($reindeer["flyTime"] + $reindeer["restTime"]);
$distance = $numberOfCycles * ($reindeer["flyTime"] * $reindeer["speed"]);
if ($reindeer["flyTime"] <= $leftSeconds) {
$distance += $reindeer["flyTime"] * $reindeer["speed"];
} else {
$distance += $leftSeconds * $reindeer["speed"];
}
return $distance;
}
$raceTime = 2503;
$results = array();
$top = 0;
while ($row = trim(fgets($inputFile))) {
$pom = explode(' ',$row);
$name = $pom[0];
$speed = $pom[3];
$flyTime = $pom[6];
$restTime = $pom[13];
$reindeer = array(
"name" => $name,
"speed" => $speed,
"flyTime" => $flyTime,
"restTime" => $restTime
);
$distance = getFlyiedDistance($raceTime, $reindeer);
$reindeer["distance"] = $distance;
$results[$name] = $reindeer;
if ($top <= $distance) {
$top = $distance;
}
}
// var_dump($results);
var_dump('najdlhsia preletena vzdialenost: ' .$top);
// 2. cast
$reindeers = $results;
// inicialzuje sa pole boodv
$points = array();
foreach ($reindeers as $name => $value) {
$points[$name] = 0;
}
// spocitaju sa pozicie bazmegov v kazdej minute
for ($i=1; $i <= $raceTime; $i++) {
$topDistance = 0;
// kazdemu bazmegovi vypocitam preletenu vzdialenosti do casu i a ulozim do properties
foreach ($reindeers as $name => $properties) {
$distance = getFlyiedDistance($i, $properties);
$reindeers[$name]['distance'] = $distance;
if ($topDistance < $distance) {
$topDistance = $distance;
}
}
// najdem, ktory maju prejdenu vzdialenost rovnu navyssej v case i
// moze ich byt viac a pridam im bodik
$firstReindeers = array();
foreach ($reindeers as $name => $properties) {
if ($properties['distance'] == $topDistance) {
$points[$name]++;
}
}
}
var_dump($points);
fclose($inputFile);