diff --git a/.gitignore b/.gitignore
index 2f43530..5ff6309 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,17 +1,38 @@
target/
-pom.xml.tag
-pom.xml.releaseBackup
-pom.xml.versionsBackup
-pom.xml.next
-release.properties
-dependency-reduced-pom.xml
-buildNumber.properties
-.mvn/timing.properties
-# https://github.com/takari/maven-wrapper#usage-without-binary-jar
-.mvn/wrapper/maven-wrapper.jar
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
-# Eclipse m2e generated files
-# Eclipse Core
-.project
-# JDT-specific (Eclipse Java Development Tools)
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..aa00ffa
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/google-java-format.xml b/.idea/google-java-format.xml
new file mode 100644
index 0000000..2aa056d
--- /dev/null
+++ b/.idea/google-java-format.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..82dbec8
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..70ce7a4
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,25 @@
+
+
+ 4.0.0
+
+ dev.miti99
+ lottery-generator
+ 1.0-SNAPSHOT
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ RELEASE
+ test
+
+
+
+
diff --git a/src/main/java/dev/miti99/lotterygenerator/LotteryGenerator.java b/src/main/java/dev/miti99/lotterygenerator/LotteryGenerator.java
new file mode 100644
index 0000000..1172375
--- /dev/null
+++ b/src/main/java/dev/miti99/lotterygenerator/LotteryGenerator.java
@@ -0,0 +1,8 @@
+package dev.miti99.lotterygenerator;
+
+import java.util.List;
+
+public interface LotteryGenerator {
+ List generateNumbers();
+ List generateNumbers(int numNumber);
+}
diff --git a/src/main/java/dev/miti99/lotterygenerator/Main.java b/src/main/java/dev/miti99/lotterygenerator/Main.java
new file mode 100644
index 0000000..6ca342c
--- /dev/null
+++ b/src/main/java/dev/miti99/lotterygenerator/Main.java
@@ -0,0 +1,7 @@
+package dev.miti99.lotterygenerator;
+
+public class Main {
+ public static void main(String[] args) {
+ System.out.println("Hello world!");
+ }
+}
diff --git a/src/main/java/dev/miti99/lotterygenerator/mega/Mega645Generator.java b/src/main/java/dev/miti99/lotterygenerator/mega/Mega645Generator.java
new file mode 100644
index 0000000..3168ba9
--- /dev/null
+++ b/src/main/java/dev/miti99/lotterygenerator/mega/Mega645Generator.java
@@ -0,0 +1,12 @@
+package dev.miti99.lotterygenerator.mega;
+
+public class Mega645Generator extends MegaGenerator {
+
+ public Mega645Generator(int numNumber) {
+ super(1, 45, numNumber);
+ }
+
+ public Mega645Generator() {
+ this(6);
+ }
+}
diff --git a/src/main/java/dev/miti99/lotterygenerator/mega/Mega655Generator.java b/src/main/java/dev/miti99/lotterygenerator/mega/Mega655Generator.java
new file mode 100644
index 0000000..a014b5f
--- /dev/null
+++ b/src/main/java/dev/miti99/lotterygenerator/mega/Mega655Generator.java
@@ -0,0 +1,12 @@
+package dev.miti99.lotterygenerator.mega;
+
+public class Mega655Generator extends MegaGenerator {
+
+ public Mega655Generator(int numNumber) {
+ super(1, 55, numNumber);
+ }
+
+ public Mega655Generator() {
+ this(6);
+ }
+}
diff --git a/src/main/java/dev/miti99/lotterygenerator/mega/MegaGenerator.java b/src/main/java/dev/miti99/lotterygenerator/mega/MegaGenerator.java
new file mode 100644
index 0000000..273412c
--- /dev/null
+++ b/src/main/java/dev/miti99/lotterygenerator/mega/MegaGenerator.java
@@ -0,0 +1,45 @@
+package dev.miti99.lotterygenerator.mega;
+
+import dev.miti99.lotterygenerator.LotteryGenerator;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+public abstract class MegaGenerator implements LotteryGenerator {
+ int minNumber;
+ int maxNumber;
+ int numNumber;
+
+ public MegaGenerator(int minNumber, int maxNumber, int numNumber) {
+ this.minNumber = minNumber;
+ this.maxNumber = maxNumber;
+ this.numNumber = numNumber;
+ }
+
+ protected int getTotalNumber() {
+ return maxNumber - minNumber + 1;
+ }
+
+ protected List generateBaseNumbers() {
+ return IntStream.rangeClosed(minNumber, maxNumber).boxed().collect(Collectors.toList());
+ }
+
+ @Override
+ public List generateNumbers(int numNumber) {
+ var baseNumbers = generateBaseNumbers();
+ var result = new ArrayList(numNumber);
+ for (int i = 0; i < numNumber; i++) {
+ var index = (int) (Math.random() * baseNumbers.size());
+ result.add(baseNumbers.get(index));
+ baseNumbers.remove(index);
+ }
+ return result;
+ }
+
+ @Override
+ public List generateNumbers() {
+ return generateNumbers(numNumber);
+ }
+}
diff --git a/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega645Generator.java b/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega645Generator.java
new file mode 100644
index 0000000..2a1b3b1
--- /dev/null
+++ b/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega645Generator.java
@@ -0,0 +1,12 @@
+package dev.miti99.lotterygenerator.mega.reverserd;
+
+public class ReversedMega645Generator extends ReversedMegaGenerator {
+
+ public ReversedMega645Generator(int numNumber) {
+ super(1, 45, numNumber);
+ }
+
+ public ReversedMega645Generator() {
+ this(6);
+ }
+}
diff --git a/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega655Generator.java b/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega655Generator.java
new file mode 100644
index 0000000..fa5655c
--- /dev/null
+++ b/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega655Generator.java
@@ -0,0 +1,12 @@
+package dev.miti99.lotterygenerator.mega.reverserd;
+
+public class ReversedMega655Generator extends ReversedMegaGenerator {
+
+ public ReversedMega655Generator(int numNumber) {
+ super(1, 55, numNumber);
+ }
+
+ public ReversedMega655Generator() {
+ this(6);
+ }
+}
diff --git a/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMegaGenerator.java b/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMegaGenerator.java
new file mode 100644
index 0000000..87a3d14
--- /dev/null
+++ b/src/main/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMegaGenerator.java
@@ -0,0 +1,18 @@
+package dev.miti99.lotterygenerator.mega.reverserd;
+
+import dev.miti99.lotterygenerator.mega.MegaGenerator;
+
+import java.util.List;
+
+public class ReversedMegaGenerator extends MegaGenerator {
+ public ReversedMegaGenerator(int minNumber, int maxNumber, int numNumber) {
+ super(minNumber, maxNumber, numNumber);
+ }
+
+ @Override
+ public List generateNumbers(int numNumber) {
+ var baseNumbers = generateBaseNumbers();
+ var removedNumbers = super.generateNumbers(getTotalNumber() - numNumber);
+ return baseNumbers.stream().filter(n -> !removedNumbers.contains(n)).toList();
+ }
+}
diff --git a/src/test/java/dev/miti99/lotterygenerator/mega/Mega645GeneratorTest.java b/src/test/java/dev/miti99/lotterygenerator/mega/Mega645GeneratorTest.java
new file mode 100644
index 0000000..d93227d
--- /dev/null
+++ b/src/test/java/dev/miti99/lotterygenerator/mega/Mega645GeneratorTest.java
@@ -0,0 +1,20 @@
+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);
+ assertEquals(numbers.indexOf(number), numbers.lastIndexOf(number));
+ }
+ }
+}
diff --git a/src/test/java/dev/miti99/lotterygenerator/mega/Mega655GeneratorTest.java b/src/test/java/dev/miti99/lotterygenerator/mega/Mega655GeneratorTest.java
new file mode 100644
index 0000000..69e3be8
--- /dev/null
+++ b/src/test/java/dev/miti99/lotterygenerator/mega/Mega655GeneratorTest.java
@@ -0,0 +1,20 @@
+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);
+ assertEquals(numbers.indexOf(number), numbers.lastIndexOf(number));
+ }
+ }
+}
diff --git a/src/test/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega645GeneratorTest.java b/src/test/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega645GeneratorTest.java
new file mode 100644
index 0000000..76e9c78
--- /dev/null
+++ b/src/test/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega645GeneratorTest.java
@@ -0,0 +1,21 @@
+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);
+ assertEquals(numbers.indexOf(number), numbers.lastIndexOf(number));
+ }
+ }
+}
diff --git a/src/test/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega655GeneratorTest.java b/src/test/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega655GeneratorTest.java
new file mode 100644
index 0000000..3d28dcc
--- /dev/null
+++ b/src/test/java/dev/miti99/lotterygenerator/mega/reverserd/ReversedMega655GeneratorTest.java
@@ -0,0 +1,21 @@
+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);
+ assertEquals(numbers.indexOf(number), numbers.lastIndexOf(number));
+ }
+ }
+}