[Strategy] (Add) new random strategy

This commit is contained in:
2023-07-29 13:04:02 +07:00
parent c7b28c2ce8
commit 9bff91e308
6 changed files with 49 additions and 12 deletions
@@ -1,8 +1,8 @@
package dev.miti99.lotterygenerator;
import java.util.List;
import java.util.Set;
public interface LotteryGenerator {
List<Integer> generateNumbers(int numNumber);
Set<Integer> generateNumbers(int numNumber);
}
@@ -1,12 +1,12 @@
package dev.miti99.lotterygenerator;
import dev.miti99.lotterygenerator.mega.Mega645Generator;
import dev.miti99.lotterygenerator.mega.Mega655Generator;
public class Main {
public static void main(String[] args) {
var generator = new Mega645Generator();
var result = generator.generateNumbers(4);
var generator = new Mega655Generator();
var result = generator.generateNumbers(7);
System.out.println(result);
}
}
@@ -1,6 +1,6 @@
package dev.miti99.lotterygenerator.mega;
import java.util.List;
import java.util.Set;
public class BasePresetGenerator extends MegaGenerator {
@@ -11,7 +11,7 @@ public class BasePresetGenerator extends MegaGenerator {
this.numNumber = numNumber;
}
public List<Integer> generateNumbers() {
public Set<Integer> generateNumbers() {
return generateNumbers(numNumber);
}
}
@@ -0,0 +1,30 @@
package dev.miti99.lotterygenerator.mega;
import java.util.HashSet;
import java.util.Set;
public class Mega655GenerateUntilMatchPreviousCase {
private final Set<Set<Integer>> history = new HashSet<>();
public static void main(String[] args) {
var generator = new Mega655GenerateUntilMatchPreviousCase();
var result = generator.generate();
System.out.println(result);
}
public Set<Integer> generate() {
history.clear();
var generator = new Mega655Generator();
Set<Integer> numbers;
while (true) {
numbers = generator.generateNumbers(6);
System.out.printf("%d. %s\n", history.size(), numbers);
if (history.contains(numbers)) {
break;
}
history.add(numbers);
}
return numbers;
}
}
@@ -2,7 +2,11 @@ package dev.miti99.lotterygenerator.mega;
import dev.miti99.lotterygenerator.LotteryGenerator;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@@ -26,11 +30,11 @@ public class MegaGenerator implements LotteryGenerator {
}
@Override
public List<Integer> generateNumbers(int numNumber) {
public Set<Integer> generateNumbers(int numNumber) {
var baseNumbers = generateBaseNumbers();
var result = new ArrayList<Integer>(numNumber);
var result = new TreeSet<Integer>();
for (int i = 0; i < numNumber; i++) {
var index = (int) (Math.random() * baseNumbers.size());
var index = ThreadLocalRandom.current().nextInt(baseNumbers.size());
result.add(baseNumbers.get(index));
baseNumbers.remove(index);
}
@@ -2,6 +2,8 @@ package dev.miti99.lotterygenerator.mega.reverserd;
import dev.miti99.lotterygenerator.mega.BasePresetGenerator;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
public class ReversedMegaGenerator extends BasePresetGenerator {
@@ -10,9 +12,10 @@ public class ReversedMegaGenerator extends BasePresetGenerator {
}
@Override
public List<Integer> generateNumbers(int numNumber) {
public Set<Integer> generateNumbers(int numNumber) {
var baseNumbers = generateBaseNumbers();
var removedNumbers = super.generateNumbers(getTotalNumber() - numNumber);
return baseNumbers.stream().filter(n -> !removedNumbers.contains(n)).toList();
return baseNumbers.stream().filter(n -> !removedNumbers.contains(n))
.collect(Collectors.toSet());
}
}