From 98c8ad5a6b49bda9ec342a95408fb10676640d22 Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Mon, 23 Oct 2023 13:50:38 +0700 Subject: [PATCH] [Add] new strategy --- .../BaseOnDateLotteryGenerator.java | 48 +++++++++++++++++++ .../BaseOnDateLotteryGeneratorTest.java | 42 ++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 src/main/java/com/github/tiennm99/lotterygenerator/BaseOnDateLotteryGenerator.java create mode 100644 src/test/java/com/github/tiennm99/lotterygenerator/BaseOnDateLotteryGeneratorTest.java diff --git a/src/main/java/com/github/tiennm99/lotterygenerator/BaseOnDateLotteryGenerator.java b/src/main/java/com/github/tiennm99/lotterygenerator/BaseOnDateLotteryGenerator.java new file mode 100644 index 0000000..fdb215c --- /dev/null +++ b/src/main/java/com/github/tiennm99/lotterygenerator/BaseOnDateLotteryGenerator.java @@ -0,0 +1,48 @@ +package com.github.tiennm99.lotterygenerator; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.HashSet; +import java.util.Random; +import java.util.Set; + +public class BaseOnDateLotteryGenerator implements LotteryGenerator { + + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); + + /** yyyyMMdd */ + private String date; + + private String getDate() { + if (date == null) { + var currentDate = LocalDate.now(); + return currentDate.format(formatter); + } + return date; + } + + public void setDate(String date) { + try { + LocalDate.parse(date, formatter); + } catch (DateTimeParseException e) { + System.out.println("Input date is not valid."); + return; + } + this.date = date; + } + + @Override + public Set generateNumbers(int totalNumber, int numNumber) { + var date = getDate(); + var dateNumber = Integer.parseInt(date); + var random = new Random(dateNumber); + + var result = new HashSet(); + while (result.size() < numNumber) { + var number = random.nextInt(totalNumber); + result.add(number); + } + return result; + } +} diff --git a/src/test/java/com/github/tiennm99/lotterygenerator/BaseOnDateLotteryGeneratorTest.java b/src/test/java/com/github/tiennm99/lotterygenerator/BaseOnDateLotteryGeneratorTest.java new file mode 100644 index 0000000..d8d0a78 --- /dev/null +++ b/src/test/java/com/github/tiennm99/lotterygenerator/BaseOnDateLotteryGeneratorTest.java @@ -0,0 +1,42 @@ +package com.github.tiennm99.lotterygenerator; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.Test; + +class BaseOnDateLotteryGeneratorTest { + @Test + void testMega645() { + var generator = new BaseOnDateLotteryGenerator(); + 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 BaseOnDateLotteryGenerator(); + generator.setDate("20231024"); + var numbers = generator.generateNumbers(55, 6); + System.out.println(numbers); + assertEquals(6, numbers.size()); + for (int number : numbers) { + assertTrue(number >= 1 && number <= 55); + } + } + + @Test + void testSetInvalidDate() { + var generator = new BaseOnDateLotteryGenerator(); + generator.setDate("20231313"); + var numbers = generator.generateNumbers(55, 6); + System.out.println(numbers); + assertEquals(6, numbers.size()); + for (int number : numbers) { + assertTrue(number >= 1 && number <= 55); + } + } +}