Skip to content

Commit b56c17a

Browse files
committed
day01
1 parent 4243868 commit b56c17a

File tree

6 files changed

+44
-27
lines changed

6 files changed

+44
-27
lines changed

docs/day01/solution/step-by-step.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ void composeMessage() {
6666

6767
```java
6868
// No need to have a redundant reindeerName field
69-
public record Reindeer(String name, String location, int numbersOfDaysForComingBack) {
69+
public record Reindeer(String name, String reindeerLocation, int numbersOfDaysForComingBack) {
7070
}
7171
```
7272

@@ -152,13 +152,13 @@ public class SantaCommunicator {
152152
public String composeMessage(Reindeer reindeer, int numberOfDaysBeforeChristmas) {
153153
var daysBeforeReturn = daysBeforeReturn(reindeer.numbersOfDaysForComingBack(), configuration.numberOfDayBeforeChristmas());
154154

155-
return "Dear " + reindeer.name() + ", please return from " + reindeer.location() +
155+
return "Dear " + reindeer.name() + ", please return from " + reindeer.reindeerLocation() +
156156
" in " + daysBeforeReturn + " day(s) to be ready and rest before Christmas.";
157157
}
158158

159159
public boolean isOverdue(Reindeer reindeer, int numberOfDaysBeforeChristmas, Logger logger) {
160160
if (daysBeforeReturn(reindeer.numbersOfDaysForComingBack(), configuration.numberOfDayBeforeChristmas()) <= 0) {
161-
logger.log("Overdue for " + reindeer.name() + " located " + reindeer.location() + ".");
161+
logger.log("Overdue for " + reindeer.name() + " located " + reindeer.reindeerLocation() + ".");
162162
return true;
163163
}
164164
return false;
@@ -192,13 +192,13 @@ public class SantaCommunicator {
192192
public String composeMessage(Reindeer reindeer) {
193193
var daysBeforeReturn = daysBeforeReturn(reindeer.numbersOfDaysForComingBack());
194194

195-
return "Dear " + reindeer.name() + ", please return from " + reindeer.location() +
195+
return "Dear " + reindeer.name() + ", please return from " + reindeer.reindeerLocation() +
196196
" in " + daysBeforeReturn + " day(s) to be ready and rest before Christmas.";
197197
}
198198

199199
public boolean isOverdue(Reindeer reindeer, Logger logger) {
200200
if (daysBeforeReturn(reindeer.numbersOfDaysForComingBack()) <= 0) {
201-
logger.log("Overdue for " + reindeer.name() + " located " + reindeer.location() + ".");
201+
logger.log("Overdue for " + reindeer.name() + " located " + reindeer.reindeerLocation() + ".");
202202
return true;
203203
}
204204
return false;
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();

exercise/kotlin/day00/gradlew.bat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ echo.
4646
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
4747
echo.
4848
echo Please set the JAVA_HOME variable in your environment to match the
49-
echo location of your Java installation.
49+
echo reindeerLocation of your Java installation.
5050

5151
goto fail
5252

@@ -60,7 +60,7 @@ echo.
6060
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
6161
echo.
6262
echo Please set the JAVA_HOME variable in your environment to match the
63-
echo location of your Java installation.
63+
echo reindeerLocation of your Java installation.
6464

6565
goto fail
6666

exercise/kotlin/day01/gradlew.bat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ echo.
4646
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
4747
echo.
4848
echo Please set the JAVA_HOME variable in your environment to match the
49-
echo location of your Java installation.
49+
echo reindeerLocation of your Java installation.
5050

5151
goto fail
5252

@@ -60,7 +60,7 @@ echo.
6060
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
6161
echo.
6262
echo Please set the JAVA_HOME variable in your environment to match the
63-
echo location of your Java installation.
63+
echo reindeerLocation of your Java installation.
6464

6565
goto fail
6666

exercise/kotlin/day02/gradlew.bat

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ echo.
4646
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
4747
echo.
4848
echo Please set the JAVA_HOME variable in your environment to match the
49-
echo location of your Java installation.
49+
echo reindeerLocation of your Java installation.
5050

5151
goto fail
5252

@@ -60,7 +60,7 @@ echo.
6060
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
6161
echo.
6262
echo Please set the JAVA_HOME variable in your environment to match the
63-
echo location of your Java installation.
63+
echo reindeerLocation of your Java installation.
6464

6565
goto fail
6666

0 commit comments

Comments
 (0)