97 lines
2.2 KiB
PHP
97 lines
2.2 KiB
PHP
<?php
|
|
|
|
function part1() {
|
|
// Get elf instructions.
|
|
$directions = file_get_contents('./2015/inputs/day3.txt');
|
|
// Convert the string to an array for processing.
|
|
$directions = str_split($directions);
|
|
$position = [0,0];
|
|
$deliveries = [];
|
|
foreach ($directions as $direction) {
|
|
// First, deliver a present at current location.
|
|
$location_key = $position[0] . '_' . $position[1];
|
|
$location_key = crypt($location_key, '123');
|
|
if (isset($deliveries[$location_key])) {
|
|
$deliveries[$location_key]++;
|
|
}
|
|
else {
|
|
$deliveries[$location_key] = 1;
|
|
}
|
|
if ($direction == '^') {
|
|
$position[1]++;
|
|
}
|
|
elseif($direction == 'v') {
|
|
$position[1]--;
|
|
}
|
|
elseif ($direction == '>') {
|
|
$position[0]++;
|
|
}
|
|
elseif ($direction == '<') {
|
|
$position[0]--;
|
|
}
|
|
}
|
|
|
|
return $deliveries;
|
|
}
|
|
|
|
function part2() {
|
|
// Get elf instructions.
|
|
$directions = file_get_contents('./2015/inputs/day3.txt');
|
|
// Convert the string to an array for processing.
|
|
$directions = str_split($directions);
|
|
$santa_position = [0,0];
|
|
$robo_position = [0,0];
|
|
$deliveries = [];
|
|
$turn = 'santa';
|
|
foreach ($directions as $direction) {
|
|
if ($turn == 'santa') {
|
|
$deliveries = updateDeliveryList($deliveries, $santa_position);
|
|
$santa_position = changeCoordinates($santa_position, $direction);
|
|
$turn = 'robo';
|
|
}
|
|
elseif ($turn == 'robo') {
|
|
$deliveries = updateDeliveryList($deliveries, $robo_position);
|
|
$robo_position = changeCoordinates($robo_position, $direction);
|
|
$turn = 'santa';
|
|
}
|
|
}
|
|
|
|
return $deliveries;
|
|
}
|
|
|
|
function updateDeliveryList(array $list, $coords) {
|
|
$location_key = $coords[0] . '_' . $coords[1];
|
|
$location_key = crypt($location_key, '123');
|
|
if (!isset($list[$location_key])) {
|
|
$list[$location_key] = 1;
|
|
}
|
|
else {
|
|
$list[$location_key]++;
|
|
}
|
|
|
|
return $list;
|
|
}
|
|
|
|
function changeCoordinates($coords, $move) {
|
|
match ($move) {
|
|
'^' => $coords[1]++,
|
|
'v' => $coords[1]--,
|
|
'>' => $coords[0]++,
|
|
'<' => $coords[0]--,
|
|
default => null,
|
|
};
|
|
|
|
return $coords;
|
|
}
|
|
|
|
|
|
function day3($part = 1) {
|
|
if ($part == 1) {
|
|
return count(part1());
|
|
}
|
|
elseif ($part == 2) {
|
|
return count(part2());
|
|
}
|
|
}
|
|
|