mirror of
https://github.com/tiennm99/lottery-generator-java.git
synced 2026-09-01 23:27:48 +00:00
[Change] refactor code
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>dev.miti99</groupId>
|
||||
<groupId>com.github.tiennm99</groupId>
|
||||
<artifactId>lottery-generator</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
package com.github.tiennm99.lotterygenerator;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Set;
|
||||
|
||||
public class GenerateUntilMatchPreviousCaseNTimesLotteryGenerator extends NormalLotteryGenerator {
|
||||
|
||||
public static final int DEFAULT_MATCH_TIME = 3;
|
||||
private final int matchTime;
|
||||
|
||||
public GenerateUntilMatchPreviousCaseNTimesLotteryGenerator(int matchTime) {
|
||||
this.matchTime = matchTime;
|
||||
}
|
||||
|
||||
public GenerateUntilMatchPreviousCaseNTimesLotteryGenerator() {
|
||||
this(DEFAULT_MATCH_TIME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Integer> generateNumbers(int totalNumber, int numNumber) {
|
||||
var history = new HashMap<Set<Integer>, Integer>();
|
||||
Set<Integer> numbers;
|
||||
int count = 0;
|
||||
while (true) {
|
||||
numbers = super.generateNumbers(totalNumber, numNumber);
|
||||
var times = history.merge(numbers, 1, Integer::sum);
|
||||
System.out.printf("%d. %s %d\n", count, numbers, times);
|
||||
if (times == matchTime) {
|
||||
break;
|
||||
}
|
||||
count++;
|
||||
}
|
||||
return numbers;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.github.tiennm99.lotterygenerator;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public interface LotteryGenerator {
|
||||
|
||||
Set<Integer> generateNumbers(int totalNumber, int numNumber);
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.github.tiennm99.lotterygenerator;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) {
|
||||
var generator = new NormalLotteryGenerator();
|
||||
var result = generator.generateNumbers(45, 6);
|
||||
System.out.println(result);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.github.tiennm99.lotterygenerator;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
public class NormalLotteryGenerator implements LotteryGenerator {
|
||||
|
||||
protected Set<Integer> generateBaseNumbers(int totalNumber) {
|
||||
return IntStream.rangeClosed(1, totalNumber).boxed().collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Integer> generateNumbers(int totalNumber, int numNumber) {
|
||||
var baseNumbers = generateBaseNumbers(totalNumber);
|
||||
var result = new TreeSet<Integer>();
|
||||
for (int i = 0; i < numNumber; i++) {
|
||||
var index = ThreadLocalRandom.current().nextInt(baseNumbers.size());
|
||||
var number = baseNumbers.stream().skip(index).findFirst().orElseThrow();
|
||||
result.add(number);
|
||||
baseNumbers.remove(number);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
package com.github.tiennm99.lotterygenerator;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class ReversedNormalLotteryGenerator extends NormalLotteryGenerator {
|
||||
|
||||
@Override
|
||||
public Set<Integer> generateNumbers(int totalNumber, int numNumber) {
|
||||
var baseNumbers = generateBaseNumbers(totalNumber);
|
||||
var removedNumbers = super.generateNumbers(totalNumber, totalNumber - numNumber);
|
||||
baseNumbers.removeAll(removedNumbers);
|
||||
return baseNumbers;
|
||||
}
|
||||
}
|
||||
+16
-6
@@ -1,6 +1,5 @@
|
||||
package dev.miti99.lotterygenerator.mega;
|
||||
package com.github.tiennm99.lotterygenerator;
|
||||
|
||||
import dev.miti99.lotterygenerator.LotteryGenerator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
@@ -9,15 +8,26 @@ import java.util.TreeMap;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class TopMatchedNumberGenerator implements LotteryGenerator {
|
||||
public class TopMatchedLotteryGenerator implements LotteryGenerator {
|
||||
|
||||
public static final int DEFAULT_MATCH_TIME = 1_000_000;
|
||||
private final int matchTime;
|
||||
|
||||
public TopMatchedLotteryGenerator(int matchTime) {
|
||||
this.matchTime = matchTime;
|
||||
}
|
||||
|
||||
public TopMatchedLotteryGenerator() {
|
||||
this(DEFAULT_MATCH_TIME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Integer> generateNumbers(int numNumber) {
|
||||
public Set<Integer> generateNumbers(int totalNumber, int numNumber) {
|
||||
Map<Integer, Integer> matchedNumbers = new HashMap<>();
|
||||
while (true) {
|
||||
var number = ThreadLocalRandom.current().nextInt(1, 56);
|
||||
var number = ThreadLocalRandom.current().nextInt(1, totalNumber + 1);
|
||||
matchedNumbers.merge(number, 1, Integer::sum);
|
||||
if (matchedNumbers.get(number) == 1_000_000_000) {
|
||||
if (matchedNumbers.get(number) == matchTime) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package dev.miti99.lotterygenerator;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public interface LotteryGenerator {
|
||||
|
||||
Set<Integer> generateNumbers(int numNumber);
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package dev.miti99.lotterygenerator;
|
||||
|
||||
import dev.miti99.lotterygenerator.mega.Mega655Generator;
|
||||
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) {
|
||||
var generator = new Mega655Generator();
|
||||
var result = generator.generateNumbers(7);
|
||||
System.out.println(result);
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package dev.miti99.lotterygenerator.mega;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class BasePresetGenerator extends MegaGenerator {
|
||||
|
||||
int numNumber;
|
||||
|
||||
public BasePresetGenerator(int minNumber, int maxNumber, int numNumber) {
|
||||
super(minNumber, maxNumber);
|
||||
this.numNumber = numNumber;
|
||||
}
|
||||
|
||||
public Set<Integer> generateNumbers() {
|
||||
return generateNumbers(numNumber);
|
||||
}
|
||||
}
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
package dev.miti99.lotterygenerator.mega;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class Mega645GenerateUntilMatchPreviousCaseNTimes {
|
||||
|
||||
private final Map<Set<Integer>, Integer> history = new HashMap<>();
|
||||
|
||||
public static void main(String[] args) {
|
||||
var generator = new Mega645GenerateUntilMatchPreviousCaseNTimes();
|
||||
var result = generator.generate();
|
||||
System.out.println(result);
|
||||
}
|
||||
|
||||
public Set<Integer> generate() {
|
||||
history.clear();
|
||||
var generator = new Mega645Generator();
|
||||
Set<Integer> numbers;
|
||||
int count = 0;
|
||||
while (true) {
|
||||
numbers = generator.generateNumbers(6);
|
||||
var times = history.merge(numbers, 1, Integer::sum);
|
||||
System.out.printf("%d. %s %d\n", count, numbers, times);
|
||||
if (times == 3) {
|
||||
break;
|
||||
}
|
||||
count++;
|
||||
}
|
||||
return numbers;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package dev.miti99.lotterygenerator.mega;
|
||||
|
||||
public class Mega645Generator extends BasePresetGenerator {
|
||||
|
||||
public Mega645Generator(int numNumber) {
|
||||
super(1, 45, numNumber);
|
||||
}
|
||||
|
||||
public Mega645Generator() {
|
||||
this(6);
|
||||
}
|
||||
}
|
||||
-30
@@ -1,30 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package dev.miti99.lotterygenerator.mega;
|
||||
|
||||
public class Mega655Generator extends BasePresetGenerator {
|
||||
|
||||
public Mega655Generator(int numNumber) {
|
||||
super(1, 55, numNumber);
|
||||
}
|
||||
|
||||
public Mega655Generator() {
|
||||
this(6);
|
||||
}
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
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;
|
||||
|
||||
public class MegaGenerator implements LotteryGenerator {
|
||||
|
||||
int minNumber;
|
||||
int maxNumber;
|
||||
|
||||
|
||||
public MegaGenerator(int minNumber, int maxNumber) {
|
||||
this.minNumber = minNumber;
|
||||
this.maxNumber = maxNumber;
|
||||
}
|
||||
|
||||
protected int getTotalNumber() {
|
||||
return maxNumber - minNumber + 1;
|
||||
}
|
||||
|
||||
protected List<Integer> generateBaseNumbers() {
|
||||
return IntStream.rangeClosed(minNumber, maxNumber).boxed().collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Integer> generateNumbers(int numNumber) {
|
||||
var baseNumbers = generateBaseNumbers();
|
||||
var result = new TreeSet<Integer>();
|
||||
for (int i = 0; i < numNumber; i++) {
|
||||
var index = ThreadLocalRandom.current().nextInt(baseNumbers.size());
|
||||
result.add(baseNumbers.get(index));
|
||||
baseNumbers.remove(index);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
package dev.miti99.lotterygenerator.mega.reverserd;
|
||||
|
||||
public class ReversedMega645Generator extends ReversedMegaGenerator {
|
||||
|
||||
public ReversedMega645Generator(int numNumber) {
|
||||
super(1, 45, numNumber);
|
||||
}
|
||||
|
||||
public ReversedMega645Generator() {
|
||||
this(6);
|
||||
}
|
||||
}
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
package dev.miti99.lotterygenerator.mega.reverserd;
|
||||
|
||||
public class ReversedMega655Generator extends ReversedMegaGenerator {
|
||||
|
||||
public ReversedMega655Generator(int numNumber) {
|
||||
super(1, 55, numNumber);
|
||||
}
|
||||
|
||||
public ReversedMega655Generator() {
|
||||
this(6);
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
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 {
|
||||
|
||||
public ReversedMegaGenerator(int minNumber, int maxNumber, int numNumber) {
|
||||
super(minNumber, maxNumber, numNumber);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Integer> generateNumbers(int numNumber) {
|
||||
var baseNumbers = generateBaseNumbers();
|
||||
var removedNumbers = super.generateNumbers(getTotalNumber() - numNumber);
|
||||
return baseNumbers.stream().filter(n -> !removedNumbers.contains(n))
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.github.tiennm99.lotterygenerator;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class GenerateUntilMatchPreviousCaseNTimesLotteryGeneratorTest {
|
||||
|
||||
@Test
|
||||
void testMega645() {
|
||||
var generator = new GenerateUntilMatchPreviousCaseNTimesLotteryGenerator();
|
||||
var numbers = generator.generateNumbers(45, 6);
|
||||
System.out.println(numbers);
|
||||
assertEquals(6, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 45);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testMega655() {
|
||||
var generator = new GenerateUntilMatchPreviousCaseNTimesLotteryGenerator();
|
||||
var numbers = generator.generateNumbers(55, 6);
|
||||
System.out.println(numbers);
|
||||
assertEquals(6, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 55);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.github.tiennm99.lotterygenerator;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class NormalLotteryGeneratorTest {
|
||||
|
||||
@Test
|
||||
void testMega645() {
|
||||
var generator = new NormalLotteryGenerator();
|
||||
var numbers = generator.generateNumbers(45, 6);
|
||||
System.out.println(numbers);
|
||||
assertEquals(6, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 45);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testMega655() {
|
||||
var generator = new NormalLotteryGenerator();
|
||||
var numbers = generator.generateNumbers(55, 6);
|
||||
System.out.println(numbers);
|
||||
assertEquals(6, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 55);
|
||||
}
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.github.tiennm99.lotterygenerator;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class ReversedNormalLotteryGeneratorTest {
|
||||
|
||||
@Test
|
||||
void testMega645() {
|
||||
var generator = new ReversedNormalLotteryGenerator();
|
||||
var numbers = generator.generateNumbers(45, 6);
|
||||
System.out.println(numbers);
|
||||
assertEquals(6, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 45);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testMega655() {
|
||||
var generator = new ReversedNormalLotteryGenerator();
|
||||
var numbers = generator.generateNumbers(55, 6);
|
||||
System.out.println(numbers);
|
||||
assertEquals(6, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 55);
|
||||
}
|
||||
}
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.github.tiennm99.lotterygenerator;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class TopMatchedLotteryGeneratorTest {
|
||||
|
||||
@Test
|
||||
void testMega645() {
|
||||
var generator = new TopMatchedLotteryGenerator();
|
||||
var numbers = generator.generateNumbers(45, 6);
|
||||
System.out.println(numbers);
|
||||
assertEquals(6, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 45);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void testMega655() {
|
||||
var generator = new TopMatchedLotteryGenerator();
|
||||
var numbers = generator.generateNumbers(55, 6);
|
||||
System.out.println(numbers);
|
||||
assertEquals(6, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 55);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package dev.miti99.lotterygenerator.mega;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class Mega645GeneratorTest {
|
||||
@Test
|
||||
public void testGenerateNumbers() {
|
||||
var mega645Generator = new Mega645Generator();
|
||||
var numbers = mega645Generator.generateNumbers();
|
||||
System.out.println(numbers);
|
||||
assertEquals(6, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 45);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package dev.miti99.lotterygenerator.mega;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class Mega655GeneratorTest {
|
||||
@Test
|
||||
public void testGenerateNumbers() {
|
||||
var mega645Generator = new Mega645Generator();
|
||||
var numbers = mega645Generator.generateNumbers();
|
||||
System.out.println(numbers);
|
||||
assertEquals(6, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 55);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
package dev.miti99.lotterygenerator.mega;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class TopMatchedNumberGeneratorTest {
|
||||
|
||||
@Test
|
||||
void generateNumbers() {
|
||||
var generator = new TopMatchedNumberGenerator();
|
||||
var numbers = generator.generateNumbers(7);
|
||||
System.out.println(numbers);
|
||||
}
|
||||
|
||||
}
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
package dev.miti99.lotterygenerator.mega.reverserd;
|
||||
|
||||
import dev.miti99.lotterygenerator.mega.Mega645Generator;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class ReversedMega645GeneratorTest {
|
||||
@Test
|
||||
public void testGenerateNumbers() {
|
||||
var mega645Generator = new Mega645Generator();
|
||||
var numbers = mega645Generator.generateNumbers(7);
|
||||
System.out.println(numbers);
|
||||
assertEquals(7, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 45);
|
||||
}
|
||||
}
|
||||
}
|
||||
-20
@@ -1,20 +0,0 @@
|
||||
package dev.miti99.lotterygenerator.mega.reverserd;
|
||||
|
||||
import dev.miti99.lotterygenerator.mega.Mega645Generator;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
class ReversedMega655GeneratorTest {
|
||||
@Test
|
||||
public void testGenerateNumbers() {
|
||||
var mega645Generator = new Mega645Generator();
|
||||
var numbers = mega645Generator.generateNumbers(7);
|
||||
System.out.println(numbers);
|
||||
assertEquals(7, numbers.size());
|
||||
for (int number : numbers) {
|
||||
assertTrue(number >= 1 && number <= 55);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user