[Add] new strategy

This commit is contained in:
2023-10-07 16:41:55 +07:00
parent 1ccb626c24
commit 68750acedb
5 changed files with 87 additions and 8 deletions
@@ -3,8 +3,8 @@ package com.github.tiennm99.lotterygenerator;
public class Main {
public static void main(String[] args) {
var generator = new NormalLotteryGenerator();
var result = generator.generateNumbers(45, 6);
var generator = new TopMatchedNumberInCaseLotteryGenerator();
var result = generator.generateNumbers(55, 7);
System.out.println(result);
}
}
@@ -0,0 +1,48 @@
package com.github.tiennm99.lotterygenerator;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
import java.util.stream.Collectors;
public class TopMatchedNumberInCaseLotteryGenerator implements LotteryGenerator {
public static final int DEFAULT_RANDOM_TIME = 1_000_000;
private final int randomTime;
private final LotteryGenerator generator;
public TopMatchedNumberInCaseLotteryGenerator(int randomTime, LotteryGenerator generator) {
this.randomTime = randomTime;
this.generator = generator;
}
public TopMatchedNumberInCaseLotteryGenerator(int randomTime) {
this(randomTime, new NormalLotteryGenerator());
}
public TopMatchedNumberInCaseLotteryGenerator(LotteryGenerator generator) {
this(DEFAULT_RANDOM_TIME, generator);
}
public TopMatchedNumberInCaseLotteryGenerator() {
this(DEFAULT_RANDOM_TIME);
}
@Override
public Set<Integer> generateNumbers(int totalNumber, int numNumber) {
Map<Integer, Integer> matchedNumbers = new HashMap<>();
for (int i = 0; i < randomTime; i++) {
var numbers = generator.generateNumbers(totalNumber, numNumber);
for (var number : numbers) {
matchedNumbers.merge(number, 1, Integer::sum);
}
}
var sortedMatchedNumbers = new TreeMap<Integer, Integer>();
matchedNumbers.forEach((key, value) -> sortedMatchedNumbers.put(value, key));
System.out.println(sortedMatchedNumbers);
return sortedMatchedNumbers.descendingMap().entrySet().stream().limit(numNumber)
.map(Entry::getValue).collect(Collectors.toSet());
}
}
@@ -8,16 +8,16 @@ import java.util.TreeMap;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;
public class TopMatchedLotteryGenerator implements LotteryGenerator {
public class TopMatchedNumberLotteryGenerator implements LotteryGenerator {
public static final int DEFAULT_MATCH_TIME = 1_000_000;
private final int matchTime;
public TopMatchedLotteryGenerator(int matchTime) {
public TopMatchedNumberLotteryGenerator(int matchTime) {
this.matchTime = matchTime;
}
public TopMatchedLotteryGenerator() {
public TopMatchedNumberLotteryGenerator() {
this(DEFAULT_MATCH_TIME);
}
@@ -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 TopMatchedNumberInCaseLotteryGeneratorTest {
@Test
void testMega645() {
var generator = new TopMatchedNumberInCaseLotteryGenerator();
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 TopMatchedNumberInCaseLotteryGenerator();
var numbers = generator.generateNumbers(55, 6);
System.out.println(numbers);
assertEquals(6, numbers.size());
for (int number : numbers) {
assertTrue(number >= 1 && number <= 55);
}
}
}
@@ -5,11 +5,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
class TopMatchedLotteryGeneratorTest {
class TopMatchedNumberLotteryGeneratorTest {
@Test
void testMega645() {
var generator = new TopMatchedLotteryGenerator();
var generator = new TopMatchedNumberLotteryGenerator();
var numbers = generator.generateNumbers(45, 6);
System.out.println(numbers);
assertEquals(6, numbers.size());
@@ -20,7 +20,7 @@ class TopMatchedLotteryGeneratorTest {
@Test
void testMega655() {
var generator = new TopMatchedLotteryGenerator();
var generator = new TopMatchedNumberLotteryGenerator();
var numbers = generator.generateNumbers(55, 6);
System.out.println(numbers);
assertEquals(6, numbers.size());