Untitled
unknown
plain_text
10 days ago
1.4 kB
3
Indexable
import gleam/list import gleam/string pub type Robot { Robot(direction: Direction, position: Position) } pub type Direction { North East South West } pub type Position { Position(x: Int, y: Int) } pub fn create(direction: Direction, position: Position) -> Robot { Robot(direction, position) } pub fn turn_right(direction: Direction) -> Direction { case direction { North -> East East -> South South -> West West -> North } } pub fn turn_left(direction: Direction) -> Direction { case direction { North -> West West -> South South -> East East -> North } } pub fn advance(position: Position, direction: Direction) -> Position { case direction { North -> Position(position.x, position.y + 1) East -> Position(position.x + 1, position.y) South -> Position(position.x, position.y - 1) West -> Position(position.x - 1, position.y) } } pub fn move(direction: Direction, position: Position, instructions: String) -> Robot { string.fold(instructions, Robot(direction, position), fn(robot, instruction) { case robot { Robot(dir, pos) -> case instruction { "R" -> Robot(turn_right(dir), pos) "L" -> Robot(turn_left(dir), pos) "A" -> Robot(dir, advance(pos, dir)) _ -> robot // Ignore unknown instructions } } }) }
Editor is loading...
Leave a Comment