<?php $instructions = explode("\n", file_get_contents('input.txt')); const NORTH = 'N'; const SOUTH = 'S'; const EAST = 'E'; const WEST = 'W'; const LEFT = 'L'; const RIGHT = 'R'; const FORWARD = 'F'; $facings = [NORTH, EAST, SOUTH, WEST]; $facing = EAST; $east = 0; $north = 0; function doingInstruction($direction, $value) { global $north, $east, $facings, $facing; switch ($direction) { case NORTH: $north += $value; break; case SOUTH: $north -= $value; break; case EAST: $east += $value; break; case WEST: $east -= $value; break; case LEFT: $turns = $value / 90; $array_position = array_search($facing, $facings); $array_max = 4; for ($i = $turns; $i > 0; $i--) { $array_position--; if ($array_position === -1) { $array_position = $array_max - 1; } } $facing = $facings[$array_position]; break; case RIGHT: $turns = $value / 90; $array_position = array_search($facing, $facings); $array_max = 4; for ($i = 0; $i < $turns; $i++) { $array_position++; if ($array_position === $array_max) { $array_position = 0; } } $facing = $facings[$array_position]; break; case FORWARD: doingInstruction($facing, (int)$value); break; } } foreach ($instructions as $instruction) { $direction = $instruction[0]; $value = (int)substr($instruction, 1); doingInstruction($direction, $value); } echo abs($east) + abs($north);