Untitled
unknown
plain_text
9 months ago
1.4 kB
6
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