From 9bff91e30810dcc408faf3b86b400ad041ad1d57 Mon Sep 17 00:00:00 2001 From: TienNM Date: Sat, 29 Jul 2023 13:04:02 +0700 Subject: [PATCH] [Strategy] (Add) new random strategy --- .../lotterygenerator/LotteryGenerator.java | 4 +-- .../dev/miti99/lotterygenerator/Main.java | 6 ++-- .../mega/BasePresetGenerator.java | 4 +-- ...Mega655GenerateUntilMatchPreviousCase.java | 30 +++++++++++++++++++ .../lotterygenerator/mega/MegaGenerator.java | 10 +++++-- .../mega/reverserd/ReversedMegaGenerator.java | 7 +++-- 6 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 src/main/java/dev/miti99/lotterygenerator/mega/Mega655GenerateUntilMatchPreviousCase.java diff --git a/src/main/java/dev/miti99/lotterygenerator/LotteryGenerator.java b/src/main/java/dev/miti99/lotterygenerator/LotteryGenerator.java index 4588185..35a7a01 100644 --- a/src/main/java/dev/miti99/lotterygenerator/LotteryGenerator.java +++ b/src/main/java/dev/miti99/lotterygenerator/LotteryGenerator.java @@ -1,8 +1,8 @@ package dev.miti99.lotterygenerator; -import java.util.List; +import java.util.Set; public interface LotteryGenerator { - List generateNumbers(int numNumber); + Set generateNumbers(int numNumber); } diff --git a/src/main/java/dev/miti99/lotterygenerator/Main.java b/src/main/java/dev/miti99/lotterygenerator/Main.java index 8075974..103ab9c 100644 --- a/src/main/java/dev/miti99/lotterygenerator/Main.java +++ b/src/main/java/dev/miti99/lotterygenerator/Main.java @@ -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); } } diff --git a/src/main/java/dev/miti99/lotterygenerator/mega/BasePresetGenerator.java b/src/main/java/dev/miti99/lotterygenerator/mega/BasePresetGenerator.java index 8c3755c..9269302 100644 --- a/src/main/java/dev/miti99/lotterygenerator/mega/BasePresetGenerator.java +++ b/src/main/java/dev/miti99/lotterygenerator/mega/BasePresetGenerator.java @@ -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 generateNumbers() { + public Set generateNumbers() { return generateNumbers(numNumber); } } diff --git a/src/main/java/dev/miti99/lotterygenerator/mega/Mega655GenerateUntilMatchPreviousCase.java b/src/main/java/dev/miti99/lotterygenerator/mega/Mega655GenerateUntilMatchPreviousCase.java new file mode 100644 index 0000000..f28cd97 --- /dev/null +++ b/src/main/java/dev/miti99/lotterygenerator/mega/Mega655GenerateUntilMatchPreviousCase.java @@ -0,0 +1,30 @@ +package dev.miti99.lotterygenerator.mega; + +import java.util.HashSet; +import java.util.Set; + +public class Mega655GenerateUntilMatchPreviousCase { + + private final Set> history = new HashSet<>(); + + public static void main(String[] args) { + var generator = new Mega655GenerateUntilMatchPreviousCase(); + var result = generator.generate(); + System.out.println(result); + } + + public Set generate() { + history.clear(); + var generator = new Mega655Generator(); + Set 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; + } +} diff --git a/src/main/java/dev/miti99/lotterygenerator/mega/MegaGenerator.java b/src/main/java/dev/miti99/lotterygenerator/mega/MegaGenerator.java index 42d6d28..d77aeb3 100644 --- a/src/main/java/dev/miti99/lotterygenerator/mega/MegaGenerator.java +++ b/src/main/java/dev/miti99/lotterygenerator/mega/MegaGenerator.java @@ -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 generateNumbers(int numNumber) { + public Set generateNumbers(int numNumber) { var baseNumbers = generateBaseNumbers(); - var result = new ArrayList(numNumber); + var result = new TreeSet(); 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); } diff --git a/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMegaGenerator.java b/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMegaGenerator.java index 62ef1c8..bcd4238 100644 --- a/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMegaGenerator.java +++ b/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMegaGenerator.java @@ -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 generateNumbers(int numNumber) { + public Set 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()); } }