R: mikado (heading enum)
This commit is contained in:
parent
ab064c71f7
commit
61e293ee18
4 changed files with 42 additions and 20 deletions
14
src/main/kotlin/org/example/Heading.kt
Normal file
14
src/main/kotlin/org/example/Heading.kt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
package org.example
|
||||
|
||||
enum class Heading(val symbol: Char) {
|
||||
NORTH('N'),
|
||||
EAST('E'),
|
||||
SOUTH('S'),
|
||||
WEST('W');
|
||||
|
||||
override fun toString(): String = symbol.toString()
|
||||
|
||||
companion object {
|
||||
fun from(symbol: Char): Heading? = entries.firstOrNull { it.symbol == symbol }
|
||||
}
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@ class Rover {
|
|||
if (command.size >= ROVER_MINIMUM_NEEDED_COMMANDS) {
|
||||
state.positionX = command[ROVER_STARTING_POSITION_X].toInt()
|
||||
state.positionY = command[ROVER_STARTING_POSITION_Y].toInt()
|
||||
state.heading = command[ROVER_FACING_DIRECTION][ROVER_COMMANDLIST_DIRECTION]
|
||||
state.heading = Heading.from(command[ROVER_FACING_DIRECTION][ROVER_COMMANDLIST_DIRECTION]) ?: Heading.NORTH
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -22,28 +22,28 @@ class Rover {
|
|||
|
||||
private fun move() {
|
||||
when (state.heading) {
|
||||
HEADING_EAST -> state.positionX++
|
||||
HEADING_SOUTH -> state.positionY--
|
||||
HEADING_WEST -> state.positionX--
|
||||
HEADING_NORTH -> state.positionY++
|
||||
Heading.EAST -> state.positionX++
|
||||
Heading.SOUTH -> state.positionY--
|
||||
Heading.WEST -> state.positionX--
|
||||
Heading.NORTH -> state.positionY++
|
||||
}
|
||||
}
|
||||
|
||||
private fun turnRight() {
|
||||
when (state.heading) {
|
||||
HEADING_EAST -> state.heading = HEADING_SOUTH
|
||||
HEADING_SOUTH -> state.heading = HEADING_WEST
|
||||
HEADING_WEST -> state.heading = HEADING_NORTH
|
||||
HEADING_NORTH -> state.heading = HEADING_EAST
|
||||
Heading.EAST -> state.heading = Heading.SOUTH
|
||||
Heading.SOUTH -> state.heading = Heading.WEST
|
||||
Heading.WEST -> state.heading = Heading.NORTH
|
||||
Heading.NORTH -> state.heading = Heading.EAST
|
||||
}
|
||||
}
|
||||
|
||||
private fun turnLeft() {
|
||||
when (state.heading) {
|
||||
HEADING_EAST -> state.heading = HEADING_NORTH
|
||||
HEADING_NORTH -> state.heading = HEADING_WEST
|
||||
HEADING_WEST -> state.heading = HEADING_SOUTH
|
||||
HEADING_SOUTH -> state.heading = HEADING_EAST
|
||||
Heading.EAST -> state.heading = Heading.NORTH
|
||||
Heading.NORTH -> state.heading = Heading.WEST
|
||||
Heading.WEST -> state.heading = Heading.SOUTH
|
||||
Heading.SOUTH -> state.heading = Heading.EAST
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -64,8 +64,3 @@ private const val ROVER_COMMANDLIST_DIRECTION = 0
|
|||
private const val COMMAND_TURN_LEFT = 'L'
|
||||
private const val COMMAND_TURN_RIGHT = 'R'
|
||||
private const val COMMAND_MOVE = 'M'
|
||||
|
||||
internal const val HEADING_EAST = 'E'
|
||||
internal const val HEADING_NORTH = 'N'
|
||||
internal const val HEADING_WEST = 'W'
|
||||
internal const val HEADING_SOUTH = 'S'
|
||||
|
|
|
|||
|
|
@ -3,5 +3,5 @@ package org.example
|
|||
class RoverState {
|
||||
var positionX: Int = 0
|
||||
var positionY: Int = 0
|
||||
var heading: Char = HEADING_NORTH
|
||||
var heading: Heading = Heading.NORTH
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue