// Use a normal grid, but with y offseted by -x
$dirs = [
"n" => [ 0, -1],
"ne" => [ 1, -1],
"se" => [ 1, 0],
"s" => [ 0, 1],
"sw" => [-1, 1],
"nw" => [-1, 0],
];
// Remove y offset to get true manhattan distance
function distance($pos) {
[$x, $y] = [$pos[0], $pos[1]];
if ($x < 0 && $y > 0 || $x > 0 && $y < 0) $y += $x;
return abs($x) + abs($y);
}
// Move in each direction
$pos = [0, 0];
$max = 0;
foreach ($input->split(",") as $dir) {
$pos[0] += $dirs[$dir->string][0];
$pos[1] += $dirs[$dir->string][1];
$max = max($max, distance($pos));
}
// Solutions
$solution_1 = distance($pos);
$solution_2 = $max;