test: add some more

main
Moritz Böhme 2024-07-02 16:56:06 +02:00
parent 6f2b3842cd
commit bbc5af9777
2 changed files with 21 additions and 9 deletions

View File

@ -1,5 +1,3 @@
package WardrobeBuilder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@ -15,9 +13,9 @@ public class WardrobeBuilder {
} }
public Set<List<Integer>> allCombinations() { public Set<List<Integer>> allCombinations() {
Set<List<Integer>> combinations = completeCombination(new ArrayList<>()); Set<List<Integer>> combinations = Set.of(new ArrayList<>());
Set<List<Integer>> newCombinations; Set<List<Integer>> newCombinations;
for (Integer element : elements) { while (anyIncompleteCombinations(combinations)) {
newCombinations = new HashSet<>(); newCombinations = new HashSet<>();
for (List<Integer> combination : combinations) { for (List<Integer> combination : combinations) {
newCombinations.addAll(completeCombination(combination)); newCombinations.addAll(completeCombination(combination));
@ -27,15 +25,19 @@ public class WardrobeBuilder {
return combinations; return combinations;
} }
private boolean anyIncompleteCombinations(Set<List<Integer>> combinations) {
return !combinations.stream().allMatch(this::isElementSumEqualToTarget);
}
private Set<List<Integer>> completeCombination(List<Integer> combination) { private Set<List<Integer>> completeCombination(List<Integer> combination) {
Integer currentSum = combination.stream().reduce(0, Integer::sum); Integer sum = calculateSum(combination);
if (currentSum == target) { if (isElementSumEqualToTarget(sum)) {
return Set.of(combination); return Set.of(combination);
} }
Set<List<Integer>> combinations = new HashSet<>(); Set<List<Integer>> combinations = new HashSet<>();
for (Integer element : elements) { for (Integer element : elements) {
if (currentSum + element <= target) { if (sum + element <= target) {
List<Integer> newCombination = new ArrayList<>(combination); List<Integer> newCombination = new ArrayList<>(combination);
newCombination.add(element); newCombination.add(element);
newCombination.sort(Integer::compareTo); newCombination.sort(Integer::compareTo);
@ -44,4 +46,16 @@ public class WardrobeBuilder {
} }
return combinations; return combinations;
} }
private boolean isElementSumEqualToTarget(List<Integer> combination) {
Integer sum = calculateSum(combination);
return sum == target;
}
private boolean isElementSumEqualToTarget(Integer sum) {
return sum == target;
}
private static Integer calculateSum(List<Integer> combination) {
return combination.stream().reduce(0, Integer::sum);
}
} }

View File

@ -1,5 +1,3 @@
import WardrobeBuilder.WardrobeBuilder;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;