Advent of code 2016/2
Ajax Direct

Answer

Part 1 :
Part 2 :
function solve($pad, $moves)
{
    $pos = xy($pad->search("5"));
    $code = "";

    foreach ($moves as $line) {
        foreach ($line->chars() as $d) {
            $pos->direction(direction($d));
            if (!$pad->has($pos)) $pos->back();
        }

        $code .= $pad->get($pos);
    }

    return $code;
}

$solution_1 = solve(grid("123\n456\n789"), $input->lines);
$solution_2 = solve(grid("  1\n 234\n56789\n ABC\n  D")->filter(), $input->lines);