-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcranes.php
executable file
·49 lines (41 loc) · 985 Bytes
/
cranes.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
#!/usr/bin/php
<?php
$stacks = [];
for($i = 1; $i <= 9; ++$i) $stacks[$i] = [];
while(($line = fgets(STDIN)) !== false) {
for($i = 0; $i < 9; ++$i) {
$item = substr($line, $i*4, 3);
$item = trim($item, "[ ]\n");
if($item !== "") {
if($item === "1") break 2;
$stacks[$i+1][] = $item;
}
}
}
for($i = 1; $i <= 9; ++$i) {
$stacks[$i] = array_reverse($stacks[$i]);
}
$p1 = $stacks;
$p2 = $stacks;
while(($line = fgets(STDIN)) !== false) {
if(sscanf($line, "move %d from %d to %d", $count, $from, $to) !== 3) continue;
for($i = 0; $i < $count; ++$i) {
$p1[$to][] = array_pop($p1[$from]);
}
$items = array_splice($p2[$from], -$count);
array_push($p2[$to], ...$items);
}
function answer($stacks) {
$result = "";
for($i = 1; $i <= 9; ++$i) {
$count = count($stacks[$i]);
if($count > 0) {
$result .= $stacks[$i][$count-1];
} else {
$result .= " ";
}
}
return $result;
}
echo "Part 1: ", answer($p1), "\n";
echo "Part 2: ", answer($p2), "\n";