diff --git a/src/main/java/uulm/teamname/marvelous/gamelibrary/config/CharacterConfig.java b/src/main/java/uulm/teamname/marvelous/gamelibrary/config/CharacterConfig.java index 904f0b1..7f5e279 100644 --- a/src/main/java/uulm/teamname/marvelous/gamelibrary/config/CharacterConfig.java +++ b/src/main/java/uulm/teamname/marvelous/gamelibrary/config/CharacterConfig.java @@ -4,8 +4,11 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; +import uulm.teamname.marvelous.gamelibrary.Tuple; import java.util.*; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Collectors; /** * POJO describing the CharacterConfig as defined by the standard document. @@ -14,7 +17,7 @@ public class CharacterConfig { @NotEmpty @Valid - @Size(min = 12, message = "has less than 12 characters") + @Size(min = 24, message = "has less than 24 characters") public CharacterProperties[] characters; @JsonIgnore private Map propertyMap; @@ -38,6 +41,18 @@ public class CharacterConfig { return unmodifiablePropertyMap; } + @JsonIgnore + public Tuple getDisjointSetsOfPropertiesOfSize(int size) { + if ((size * 2) > characters.length) { + return null; + } else { + var characterList = Arrays.asList(this.characters); + Collections.shuffle(characterList); + return Tuple.of(characterList.subList(0, size).toArray(new CharacterProperties[0]), + characterList.subList(size, 2 * size).toArray(new CharacterProperties[0])); + } + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/test/java/uulm/teamname/marvelous/gamelibrary/json/config/CharacterConfigJSONTest.java b/src/test/java/uulm/teamname/marvelous/gamelibrary/json/config/CharacterConfigJSONTest.java index 276e5db..ac9c43b 100644 --- a/src/test/java/uulm/teamname/marvelous/gamelibrary/json/config/CharacterConfigJSONTest.java +++ b/src/test/java/uulm/teamname/marvelous/gamelibrary/json/config/CharacterConfigJSONTest.java @@ -4,9 +4,12 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import net.jqwik.api.*; import net.jqwik.api.lifecycle.BeforeProperty; +import org.junit.jupiter.api.Test; import uulm.teamname.marvelous.gamelibrary.config.CharacterConfig; import uulm.teamname.marvelous.gamelibrary.config.CharacterProperties; +import uulm.teamname.marvelous.gamelibrary.json.JSON; +import java.util.Arrays; import java.util.HashSet; import java.util.concurrent.ThreadLocalRandom; @@ -260,6 +263,18 @@ class CharacterConfigJSONTest { } """; + @Test + void disjointSubsetGenerationWorks() { + var characterConfig = JSON.parseCharacterConfig(json); + System.out.println(characterConfig.get().characters.length); + var tuple = characterConfig.get().getDisjointSetsOfPropertiesOfSize(6); + assertThat(tuple.item1).doesNotHaveDuplicates().hasSize(6); + assertThat(tuple.item2).doesNotHaveDuplicates().hasSize(6); + assertThat(tuple.item1) + .doesNotContainAnyElementsOf(Arrays.asList(tuple.item2)); + System.out.println(tuple); + } + ObjectMapper mapper; @BeforeProperty