2024-11-24 18:54:26 -05:00

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());
}
}