-module(robot_simulator). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([create/2, move/3]). -export_type([direction/0, position/0, robot/0]). -type direction() :: north | east | south | west. -type position() :: {position, integer(), integer()}. -type robot() :: {robot, direction(), position()}. -file("/Users/bradleymehder/Developer/Frameworks/Gleam/playground/src/robot_simulator.gleam", 19). -spec create(direction(), position()) -> robot(). create(Direction, Position) -> {robot, Direction, Position}. -file("/Users/bradleymehder/Developer/Frameworks/Gleam/playground/src/robot_simulator.gleam", 44). -spec turn_right(robot()) -> robot(). turn_right(Robot) -> case erlang:element(2, Robot) of north -> erlang:setelement(2, Robot, east); east -> erlang:setelement(2, Robot, south); south -> erlang:setelement(2, Robot, west); west -> erlang:setelement(2, Robot, north) end. -file("/Users/bradleymehder/Developer/Frameworks/Gleam/playground/src/robot_simulator.gleam", 53). -spec turn_left(robot()) -> robot(). turn_left(Robot) -> case erlang:element(2, Robot) of north -> erlang:setelement(2, Robot, west); east -> erlang:setelement(2, Robot, north); south -> erlang:setelement(2, Robot, east); west -> erlang:setelement(2, Robot, south) end. -file("/Users/bradleymehder/Developer/Frameworks/Gleam/playground/src/robot_simulator.gleam", 62). -spec advance(robot()) -> robot(). advance(Robot) -> {position, X, Y} = erlang:element(3, Robot), case erlang:element(2, Robot) of north -> erlang:setelement(3, Robot, {position, X, Y + 1}); east -> erlang:setelement(3, Robot, {position, X + 1, Y}); south -> erlang:setelement(3, Robot, {position, X, Y - 1}); west -> erlang:setelement(3, Robot, {position, X - 1, Y}) end. -file("/Users/bradleymehder/Developer/Frameworks/Gleam/playground/src/robot_simulator.gleam", 23). -spec move(direction(), position(), binary()) -> robot(). move(Direction, Position, Instructions) -> Robot = create(Direction, Position), Move_folder = fun(Robot@1, Instruction) -> case Instruction of <<"R"/utf8>> -> turn_right(Robot@1); <<"L"/utf8>> -> turn_left(Robot@1); <<"A"/utf8>> -> advance(Robot@1); _ -> erlang:error(#{gleam_error => panic, message => <<"unreachable"/utf8>>, module => <<"robot_simulator"/utf8>>, function => <<"move"/utf8>>, line => 35}) end end, _pipe = Instructions, _pipe@1 = gleam@string:to_graphemes(_pipe), gleam@list:fold(_pipe@1, Robot, Move_folder).