Skip to content

Commit bce23d9

Browse files
committed
day01
1 parent 4243868 commit bce23d9

File tree

2 files changed

+33
-16
lines changed

2 files changed

+33
-16
lines changed
Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,47 @@
11
package communication;
22

33
public class SantaCommunicator {
4-
private final int numberOfDaysToRest;
4+
private final ReindeerPlanner reindeerPlanner;
55

66
public SantaCommunicator(int numberOfDaysToRest) {
7-
this.numberOfDaysToRest = numberOfDaysToRest;
7+
this.reindeerPlanner = new ReindeerPlanner(numberOfDaysToRest);
88
}
99

10-
public String composeMessage(String reindeerName, String currentLocation, int numbersOfDaysForComingBack, int numberOfDaysBeforeChristmas) {
11-
var daysBeforeReturn = daysBeforeReturn(numbersOfDaysForComingBack, numberOfDaysBeforeChristmas);
10+
public String composeMessage(String reindeerName, ReindeerLocation reindeerLocation, int numberOfDaysBeforeChristmas) {
11+
var daysBeforeReturn = reindeerPlanner.daysBeforeReturn(reindeerLocation, numberOfDaysBeforeChristmas);
1212

13-
return "Dear " + reindeerName + ", please return from " + currentLocation +
14-
" in " + daysBeforeReturn + " day(s) to be ready and rest before Christmas.";
13+
return "Dear " + reindeerName + ", please return from " + reindeerLocation.currentLocation() +
14+
" in " + daysBeforeReturn + " day(s) to be ready and rest before Christmas.";
1515
}
1616

17-
public boolean isOverdue(String reindeerName, String currentLocation, int numbersOfDaysForComingBack, int numberOfDaysBeforeChristmas, Logger logger) {
18-
if (daysBeforeReturn(numbersOfDaysForComingBack, numberOfDaysBeforeChristmas) <= 0) {
19-
logger.log("Overdue for " + reindeerName + " located " + currentLocation + ".");
17+
public boolean isOverdue(String reindeerName, ReindeerLocation reindeerLocation, int numberOfDaysBeforeChristmas, Logger logger) {
18+
if (!reindeerLocation.isReachableInDays(reindeerPlanner.numberOfDaysBeforeRestingBeforeChristmas(numberOfDaysBeforeChristmas))) {
19+
logger.log("Overdue for " + reindeerName + " located " + reindeerLocation.currentLocation() + ".");
2020
return true;
2121
}
2222
return false;
2323
}
2424

25-
private int daysBeforeReturn(int numbersOfDaysForComingBack, int numberOfDaysBeforeChristmas) {
26-
return numberOfDaysBeforeChristmas - numbersOfDaysForComingBack - numberOfDaysToRest;
25+
public static class ReindeerPlanner {
26+
private final int numberOfDaysToRest;
27+
28+
public ReindeerPlanner(int numberOfDaysToRest) {
29+
this.numberOfDaysToRest = numberOfDaysToRest;
30+
}
31+
32+
private int numberOfDaysBeforeRestingBeforeChristmas(int numberOfDaysBeforeChristmas) {
33+
return numberOfDaysBeforeChristmas - numberOfDaysToRest;
34+
}
35+
36+
private int daysBeforeReturn(ReindeerLocation reindeerLocation, int numberOfDaysBeforeChristmas) {
37+
return numberOfDaysBeforeRestingBeforeChristmas(numberOfDaysBeforeChristmas)
38+
- reindeerLocation.distanceFromSantaHouseInDays();
39+
}
40+
}
41+
42+
public record ReindeerLocation(String currentLocation, int distanceFromSantaHouseInDays) {
43+
boolean isReachableInDays(int daysToTravel) {
44+
return daysToTravel > distanceFromSantaHouseInDays();
45+
}
2746
}
2847
}

exercise/java/day01/src/test/java/SantaCommunicatorTest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,15 @@ void setup() {
2020

2121
@Test
2222
void composeMessage() {
23-
var message = communicator.composeMessage(DASHER, NORTH_POLE, 5, numberOfDayBeforeChristmas);
23+
var message = communicator.composeMessage(DASHER, new SantaCommunicator.ReindeerLocation(NORTH_POLE, 5), numberOfDayBeforeChristmas);
2424
assertThat(message).isEqualTo("Dear Dasher, please return from North Pole in 17 day(s) to be ready and rest before Christmas.");
2525
}
2626

2727
@Test
2828
void shouldDetectOverdueReindeer() {
2929
var overdue = communicator.isOverdue(
3030
DASHER,
31-
NORTH_POLE,
32-
numberOfDayBeforeChristmas,
31+
new SantaCommunicator.ReindeerLocation(NORTH_POLE, numberOfDayBeforeChristmas),
3332
numberOfDayBeforeChristmas,
3433
logger);
3534

@@ -43,8 +42,7 @@ void shouldReturnFalseWhenNoOverdue() {
4342
assertThat(
4443
communicator.isOverdue(
4544
DASHER,
46-
NORTH_POLE,
47-
numberOfDayBeforeChristmas - numberOfDaysToRest - 1,
45+
new SantaCommunicator.ReindeerLocation(NORTH_POLE, numberOfDayBeforeChristmas - numberOfDaysToRest - 1),
4846
numberOfDayBeforeChristmas,
4947
logger)
5048
).isFalse();

0 commit comments

Comments
 (0)