From 026195c8493882b721f565859e4a17c7478f4608 Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Sat, 22 Jun 2024 15:27:06 +0200 Subject: [PATCH] simplify internal contracts of Map --- .../marsrover/cartography/MarsMap.java | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MarsMap.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MarsMap.java index fa38991..23f8e1a 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MarsMap.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MarsMap.java @@ -20,6 +20,7 @@ public class MarsMap { private final int height; private final int width; private Coordinates currentPosition; + private Direction currentMovementDirection; private final List obstaclesLocalizations; private final MapIncrementalPositionResolver positionResolver; @@ -33,58 +34,56 @@ public class MarsMap { positionResolver = new MapIncrementalPositionResolver(FIRST_POSITION_IN_MAP, INCREMENT_UNIT); } - public void updatePositionTowards(Direction direction) { - boolean updatedPosition = switch (direction) { + public synchronized void updatePositionTowards(Direction direction) { + currentMovementDirection = direction; + switch (direction) { case NORTH -> decrementLatitude(); case SOUTH -> incrementLatitude(); case WEST -> decrementLongitude(); case EAST -> incrementLongitude(); - }; - if (updatedPosition) - logger.info(String.format("Updated coordinates towards %s, now is %d-%d", - direction, currentPosition.latitude(), currentPosition.longitude())); + } + currentMovementDirection = null; } - private boolean incrementLatitude() { + private void incrementLatitude() { int latitude = currentPosition.latitude(); int newLatitude = positionResolver.getIncrementedPosition(latitude, height); - return setNewLatitudeIfNoObstacle(newLatitude); + setNewLatitudeIfNoObstacle(newLatitude); } - private boolean decrementLatitude() { + private void decrementLatitude() { int latitude = currentPosition.latitude(); int newLatitude = positionResolver.getDecrementedPosition(latitude, height); - return setNewLatitudeIfNoObstacle(newLatitude); + setNewLatitudeIfNoObstacle(newLatitude); } - private boolean incrementLongitude() { + private void incrementLongitude() { int longitude = currentPosition.longitude(); int newLongitude = positionResolver.getIncrementedPosition(longitude, width); - return setNewLongitudeIfNoObstacle(newLongitude); + setNewLongitudeIfNoObstacle(newLongitude); } - private boolean decrementLongitude() { + private void decrementLongitude() { int longitude = currentPosition.longitude(); int newLongitude = positionResolver.getDecrementedPosition(longitude, width); - return setNewLongitudeIfNoObstacle(newLongitude); + setNewLongitudeIfNoObstacle(newLongitude); } - private boolean setNewLatitudeIfNoObstacle(int newLatitude) { + private void setNewLatitudeIfNoObstacle(int newLatitude) { Coordinates newCoordinates = currentPosition.ofUpdatedLatitude(newLatitude); - return setNewPositionIfNoObstacle(newCoordinates); + setNewPositionIfNoObstacle(newCoordinates); } - private boolean setNewLongitudeIfNoObstacle(int newLongitude) { + private void setNewLongitudeIfNoObstacle(int newLongitude) { Coordinates newCoordinates = currentPosition.ofUpdatedLongitude(newLongitude); - return setNewPositionIfNoObstacle(newCoordinates); + setNewPositionIfNoObstacle(newCoordinates); } - private boolean setNewPositionIfNoObstacle(Coordinates newCoordinates) { - if (willCollideWithObstacle(newCoordinates)) - return false; - else { + private void setNewPositionIfNoObstacle(Coordinates newCoordinates) { + if (!willCollideWithObstacle(newCoordinates)) { currentPosition = newCoordinates; - return true; + logger.info(String.format("Updated coordinates towards %s, now is %d-%d", + currentMovementDirection, currentPosition.latitude(), currentPosition.longitude())); } }