From bbc5af9777ddf903e3696f5be69206f4e615a8c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Tue, 2 Jul 2024 16:56:06 +0200 Subject: [PATCH] test: add some more --- .../WardrobeBuilder.java | 28 ++++++++++++++----- src/test/java/MainTest.java | 2 -- 2 files changed, 21 insertions(+), 9 deletions(-) rename src/main/java/{WardrobeBuilder => }/WardrobeBuilder.java (59%) diff --git a/src/main/java/WardrobeBuilder/WardrobeBuilder.java b/src/main/java/WardrobeBuilder.java similarity index 59% rename from src/main/java/WardrobeBuilder/WardrobeBuilder.java rename to src/main/java/WardrobeBuilder.java index 26e84d9..be8207c 100644 --- a/src/main/java/WardrobeBuilder/WardrobeBuilder.java +++ b/src/main/java/WardrobeBuilder.java @@ -1,5 +1,3 @@ -package WardrobeBuilder; - import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -15,9 +13,9 @@ public class WardrobeBuilder { } public Set> allCombinations() { - Set> combinations = completeCombination(new ArrayList<>()); + Set> combinations = Set.of(new ArrayList<>()); Set> newCombinations; - for (Integer element : elements) { + while (anyIncompleteCombinations(combinations)) { newCombinations = new HashSet<>(); for (List combination : combinations) { newCombinations.addAll(completeCombination(combination)); @@ -27,15 +25,19 @@ public class WardrobeBuilder { return combinations; } + private boolean anyIncompleteCombinations(Set> combinations) { + return !combinations.stream().allMatch(this::isElementSumEqualToTarget); + } + private Set> completeCombination(List combination) { - Integer currentSum = combination.stream().reduce(0, Integer::sum); - if (currentSum == target) { + Integer sum = calculateSum(combination); + if (isElementSumEqualToTarget(sum)) { return Set.of(combination); } Set> combinations = new HashSet<>(); for (Integer element : elements) { - if (currentSum + element <= target) { + if (sum + element <= target) { List newCombination = new ArrayList<>(combination); newCombination.add(element); newCombination.sort(Integer::compareTo); @@ -44,4 +46,16 @@ public class WardrobeBuilder { } return combinations; } + + private boolean isElementSumEqualToTarget(List combination) { + Integer sum = calculateSum(combination); + return sum == target; + } + private boolean isElementSumEqualToTarget(Integer sum) { + return sum == target; + } + + private static Integer calculateSum(List combination) { + return combination.stream().reduce(0, Integer::sum); + } } diff --git a/src/test/java/MainTest.java b/src/test/java/MainTest.java index bfc4ef3..db39f10 100644 --- a/src/test/java/MainTest.java +++ b/src/test/java/MainTest.java @@ -1,5 +1,3 @@ -import WardrobeBuilder.WardrobeBuilder; - import java.util.List; import java.util.Set;