From adbca95241979aa203ec84f09f9f75da9e84e2b4 Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Fri, 21 Jun 2024 11:56:48 +0200 Subject: [PATCH] some refinements and cleaning code --- .../MapIncrementalPositionResolver.java | 24 +++++++++++ .../hack3/codingtests/marsrover/MarsMap.java | 42 ++++++++----------- .../codingtests/marsrover/MarsRoverTest.java | 2 +- 3 files changed, 43 insertions(+), 25 deletions(-) create mode 100644 src/main/java/cat/hack3/codingtests/marsrover/MapIncrementalPositionResolver.java diff --git a/src/main/java/cat/hack3/codingtests/marsrover/MapIncrementalPositionResolver.java b/src/main/java/cat/hack3/codingtests/marsrover/MapIncrementalPositionResolver.java new file mode 100644 index 0000000..710f7d5 --- /dev/null +++ b/src/main/java/cat/hack3/codingtests/marsrover/MapIncrementalPositionResolver.java @@ -0,0 +1,24 @@ +package cat.hack3.codingtests.marsrover; + +public class MapIncrementalPositionResolver { + + private final int firstPositionInMap; + private final int incrementUnit; + + public MapIncrementalPositionResolver(int firstPositionInMap, int incrementUnit) { + this.firstPositionInMap = firstPositionInMap; + this.incrementUnit = incrementUnit; + } + + int getIncrementedPosition(int currentPosition, int threshold) { + return currentPosition + incrementUnit > threshold + ? firstPositionInMap + : ++currentPosition; + } + + int getDecrementedPosition(int currentPosition, int threshold) { + return currentPosition - incrementUnit < firstPositionInMap + ? threshold + : --currentPosition; + } +} diff --git a/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java b/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java index 63c6113..ee8cd20 100644 --- a/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java +++ b/src/main/java/cat/hack3/codingtests/marsrover/MarsMap.java @@ -13,15 +13,21 @@ import java.util.logging.Logger; */ public class MarsMap { Logger logger = Logger.getLogger(this.getClass().getName()); + private static final int FIRST_POSITION_IN_MAP = 1; + private static final int INCREMENT_UNIT = 1; - private final int width; private final int height; + private final int width; private Coordinates currentPosition; - public MarsMap(int width, int height, Coordinates startingCoordinates) { - this.width = width; + private final MapIncrementalPositionResolver positionResolver; + + public MarsMap(int height, int width, Coordinates startingCoordinates) { this.height = height; + this.width = width; currentPosition = startingCoordinates; + + positionResolver = new MapIncrementalPositionResolver(FIRST_POSITION_IN_MAP, INCREMENT_UNIT); } public Coordinates updatePositionTowards(Direction direction) { @@ -39,40 +45,28 @@ public class MarsMap { private void incrementLatitude() { int latitude = currentPosition.latitude(); - int newLatitude = getIncrementedPosition(latitude, height); + int newLatitude = positionResolver.getIncrementedPosition(latitude, height); + setNewLatitude(newLatitude); + } + + private void decrementLatitude() { + int latitude = currentPosition.latitude(); + int newLatitude = positionResolver.getDecrementedPosition(latitude, height); setNewLatitude(newLatitude); } private void incrementLongitude() { int longitude = currentPosition.longitude(); - int newLongitude = getIncrementedPosition(longitude, width); + int newLongitude = positionResolver.getIncrementedPosition(longitude, width); setNewLongitude(newLongitude); } - private int getIncrementedPosition(int currentPosition, int threshold) { - return currentPosition + 1 > threshold - ? 1 - : ++currentPosition; - } - - private void decrementLatitude() { - int latitude = currentPosition.latitude(); - int newLatitude = decrementPosition(latitude, height); - setNewLatitude(newLatitude); - } - private void decrementLongitude() { int longitude = currentPosition.longitude(); - int newLongitude = decrementPosition(longitude, width); + int newLongitude = positionResolver.getDecrementedPosition(longitude, width); setNewLongitude(newLongitude); } - private int decrementPosition(int currentPosition, int threshold) { - return currentPosition - 1 < 1 - ? threshold - : --currentPosition; - } - private void setNewLatitude(int newLatitude) { currentPosition = currentPosition.ofUpdatedLatitude(newLatitude); } diff --git a/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java b/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java index ea06324..2e755d8 100644 --- a/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java +++ b/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java @@ -19,7 +19,7 @@ public class MarsRoverTest { int latitudeStartingPoint = 2; int longitudeStartingPoint = 3; var startingCoordinates = Coordinates.of(latitudeStartingPoint, longitudeStartingPoint); - var marsMap = new MarsMap(mapWidth, mapHeight, startingCoordinates); + var marsMap = new MarsMap(mapHeight, mapWidth, startingCoordinates); rover = new MarsRover(marsMap, SOUTH); }