diff --git a/README.md b/README.md index 81b03cdba2..923aa6c5e4 100644 --- a/README.md +++ b/README.md @@ -1,207 +1,28 @@ -# ๊ณผ์ œ - ๋กœ๋˜ - -## ๐Ÿ” ์ง„ํ–‰ ๋ฐฉ์‹ - -- ๊ณผ์ œ๋Š” **๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ, ๊ณผ์ œ ์ง„ํ–‰ ์š”๊ตฌ ์‚ฌํ•ญ** ์„ธ ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. -- ์„ธ ๊ฐœ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ๋‹ค. ํŠนํžˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ณ , ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ปค๋ฐ‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค. -- ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ์— ๊ธฐ์žฌ๋˜์ง€ ์•Š์€ ๋‚ด์šฉ์€ ์Šค์Šค๋กœ ํŒ๋‹จํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค. - ---- - -## ๐Ÿ“ˆ ๊ณผ์ œ ์ง„ํ–‰ ๋ฐ ์ œ์ถœ ๋ฐฉ๋ฒ• - -- ๊ณผ์ œ๋Š” [java-lotto](https://github.com/LandvibeDev/java-lotto) ์ €์žฅ์†Œ๋ฅผ Fork/Cloneํ•ด ์‹œ์ž‘ํ•œ๋‹ค. -- **๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— java-baseball-precourse/README.md ํŒŒ์ผ์— ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ •๋ฆฌ**ํ•ด ์ถ”๊ฐ€ํ•œ๋‹ค. -- **Git์˜ ์ปค๋ฐ‹ ๋‹จ์œ„๋Š” ์•ž ๋‹จ๊ณ„์—์„œ README.md ํŒŒ์ผ์— ์ •๋ฆฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก ๋‹จ์œ„**๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค. - - [AngularJS Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) ์ฐธ๊ณ ํ•ด commit log๋ฅผ ๋‚จ๊ธด๋‹ค. -- ๊ณผ์ œ ์ง„ํ–‰ ๋ฐ ์ œ์ถœ ๋ฐฉ๋ฒ•์€ [์šฐ์•„ํ•œ์ฝ”์Šค ๊ณผ์ œ ์ œ์ถœ ๋ฌธ์„œ](https://github.com/woowacourse/woowacourse-docs/tree/master/precourse) ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค. - - base repository๋ฅผ `LandvibeDev/java-lotto`๋กœ ์ง€์ •ํ•ด์„œ PR ์ƒ์„ฑํ•˜๋ฉด๋จ - -
- -### ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ฐ€์ด๋“œ - -- ํ„ฐ๋ฏธ๋„์—์„œ `java -version`์„ ์‹คํ–‰ํ•˜์—ฌ Java ๋ฒ„์ „์ด 14์ธ์ง€ ํ™•์ธํ•œ๋‹ค. ๋˜๋Š” Eclipse ๋˜๋Š” IntelliJ IDEA์™€ ๊ฐ™์€ IDE์—์„œ Java 14๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. -- ํ„ฐ๋ฏธ๋„์—์„œ Mac ๋˜๋Š” Linux ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ `./gradlew clean test` ๋ช…๋ น์„ ์‹คํ–‰ ํ•˜๊ณ , - Windows ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ `gradlew.bat clean test` ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ ๋™์ž‘ ํ•˜๋Š”์ง€ ๋งŒ ํ™•์ธ(ํ…Œ์ŠคํŠธ๋Š” ์‹คํŒจ). - ---- - -## ๐Ÿš€ ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ - -๋กœ๋˜ ๊ฒŒ์ž„ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋กœ๋˜ ๊ฒŒ์ž„์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค. - -``` -- ๋กœ๋˜ ๋ฒˆํ˜ธ์˜ ์ˆซ์ž ๋ฒ”์œ„๋Š” 1~45๊นŒ์ง€์ด๋‹ค. -- 1๊ฐœ์˜ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•  ๋•Œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” 6๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋ฝ‘๋Š”๋‹ค. -- ๋‹น์ฒจ ๋ฒˆํ˜ธ ์ถ”์ฒจ ์‹œ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์ˆซ์ž 6๊ฐœ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ 1๊ฐœ๋ฅผ ๋ฝ‘๋Š”๋‹ค. -- ๋‹น์ฒจ์€ 1๋“ฑ๋ถ€ํ„ฐ 5๋“ฑ๊นŒ์ง€ ์žˆ๋‹ค. ๋‹น์ฒจ ๊ธฐ์ค€๊ณผ ๊ธˆ์•ก์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. - - 1๋“ฑ: 6๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 2,000,000,000์› - - 2๋“ฑ: 5๊ฐœ ๋ฒˆํ˜ธ + ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ผ์น˜ / 30,000,000์› - - 3๋“ฑ: 5๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 1,500,000์› - - 4๋“ฑ: 4๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 50,000์› - - 5๋“ฑ: 3๊ฐœ ๋ฒˆํ˜ธ ์ผ์น˜ / 5,000์› -``` - -- ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก์„ ์ž…๋ ฅํ•˜๋ฉด ๊ตฌ์ž… ๊ธˆ์•ก์— ํ•ด๋‹นํ•˜๋Š” ๋งŒํผ ๋กœ๋˜๋ฅผ ๋ฐœํ–‰ํ•ด์•ผ ํ•œ๋‹ค. -- ๋กœ๋˜ 1์žฅ์˜ ๊ฐ€๊ฒฉ์€ 1,000์›์ด๋‹ค. -- ๋‹น์ฒจ ๋ฒˆํ˜ธ์™€ ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค. -- ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ๋งคํ•œ ๋กœ๋˜ ๋ฒˆํ˜ธ์™€ ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋‹น์ฒจ ๋‚ด์—ญ ๋ฐ ์ˆ˜์ต๋ฅ ์„ ์ถœ๋ ฅํ•˜๊ณ  ๋กœ๋˜ ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•œ๋‹ค. -- ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ `IllegalArgumentException`๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ ํ›„ ์ข…๋ฃŒํ•œ๋‹ค. - -## โœ๐Ÿป ์ž…์ถœ๋ ฅ ์š”๊ตฌ์‚ฌํ•ญ - -### โŒจ๏ธ ์ž…๋ ฅ - -- ๋กœ๋˜ ๊ตฌ์ž… ๊ธˆ์•ก์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. ๊ตฌ์ž… ๊ธˆ์•ก์€ 1,000์› ๋‹จ์œ„๋กœ ์ž…๋ ฅ ๋ฐ›์œผ๋ฉฐ 1,000์›์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•œ๋‹ค. - -``` -14000 -``` - -- ๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. ๋ฒˆํ˜ธ๋Š” ์‰ผํ‘œ(,)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค. - -``` -1,2,3,4,5,6 -``` - -- ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. - -``` -7 -``` - -### ๐Ÿ–ฅ ์ถœ๋ ฅ - -- ๋ฐœํ–‰ํ•œ ๋กœ๋˜ ์ˆ˜๋Ÿ‰ ๋ฐ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜์—ฌ ๋ณด์—ฌ์ค€๋‹ค. - -``` -8๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค. -[8, 21, 23, 41, 42, 43] -[3, 5, 11, 16, 32, 38] -[7, 11, 16, 35, 36, 44] -[1, 8, 11, 31, 41, 42] -[13, 14, 16, 38, 42, 45] -[7, 11, 30, 40, 42, 43] -[2, 13, 22, 32, 38, 45] -[1, 3, 5, 14, 22, 45] -``` - -- ๋‹น์ฒจ ๋‚ด์—ญ์„ ์ถœ๋ ฅํ•œ๋‹ค. - -``` -3๊ฐœ ์ผ์น˜ (5,000์›) - 1๊ฐœ -4๊ฐœ ์ผ์น˜ (50,000์›) - 0๊ฐœ -5๊ฐœ ์ผ์น˜ (1,500,000์›) - 0๊ฐœ -5๊ฐœ ์ผ์น˜, ๋ณด๋„ˆ์Šค ๋ณผ ์ผ์น˜ (30,000,000์›) - 0๊ฐœ -6๊ฐœ ์ผ์น˜ (2,000,000,000์›) - 0๊ฐœ -``` - -- ์ˆ˜์ต๋ฅ ์€ ์†Œ์ˆ˜์  ๋‘˜์งธ ์ž๋ฆฌ์—์„œ ๋ฐ˜์˜ฌ๋ฆผํ•œ๋‹ค. (ex. 100.0%, 51.5%, 1,000,000.0%) - -``` -์ด ์ˆ˜์ต๋ฅ ์€ 62.5%์ž…๋‹ˆ๋‹ค. -``` - -- ์˜ˆ์™ธ ์ƒํ™ฉ ์‹œ ์—๋Ÿฌ ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ, ์—๋Ÿฌ ๋ฌธ๊ตฌ๋Š” "[ERROR]"๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค. - -``` -[ERROR] ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” 1๋ถ€ํ„ฐ 45 ์‚ฌ์ด์˜ ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. -``` - -### ๐Ÿ’ป ์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ - -``` -๊ตฌ์ž…๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”. -8000 - -8๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค. -[8, 21, 23, 41, 42, 43] -[3, 5, 11, 16, 32, 38] -[7, 11, 16, 35, 36, 44] -[1, 8, 11, 31, 41, 42] -[13, 14, 16, 38, 42, 45] -[7, 11, 30, 40, 42, 43] -[2, 13, 22, 32, 38, 45] -[1, 3, 5, 14, 22, 45] - -๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”. -1,2,3,4,5,6 - -๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”. -7 - -๋‹น์ฒจ ํ†ต๊ณ„ ---- -3๊ฐœ ์ผ์น˜ (5,000์›) - 1๊ฐœ -4๊ฐœ ์ผ์น˜ (50,000์›) - 0๊ฐœ -5๊ฐœ ์ผ์น˜ (1,500,000์›) - 0๊ฐœ -5๊ฐœ ์ผ์น˜, ๋ณด๋„ˆ์Šค ๋ณผ ์ผ์น˜ (30,000,000์›) - 0๊ฐœ -6๊ฐœ ์ผ์น˜ (2,000,000,000์›) - 0๊ฐœ -์ด ์ˆ˜์ต๋ฅ ์€ 62.5%์ž…๋‹ˆ๋‹ค. -``` - ---- - -## ๐ŸŽฏ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ - -- JDK 14 ๋ฒ„์ „์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. -- ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์˜ ์‹œ์ž‘์ ์€ `Application`์˜ `main()`์ด๋‹ค. -- `build.gradle` ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ , ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. -- [Java ์ฝ”๋“œ ์ปจ๋ฒค์…˜](https://naver.github.io/hackday-conventions-java/) ๊ฐ€์ด๋“œ๋ฅผ ์ค€์ˆ˜ํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•œ๋‹ค. -- ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ `System.exit()`๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. -- ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๋ฉด `ApplicationTest`์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•ด์•ผ ํ•œ๋‹ค. -- ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ์—์„œ ๋‹ฌ๋ฆฌ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ ํŒŒ์ผ, ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ด๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค. -- indent(์ธ๋ดํŠธ, ๋“ค์—ฌ์“ฐ๊ธฐ) depth๋ฅผ 3์ด ๋„˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. 2๊นŒ์ง€๋งŒ ํ—ˆ์šฉํ•œ๋‹ค. - - ์˜ˆ๋ฅผ ๋“ค์–ด while๋ฌธ ์•ˆ์— if๋ฌธ์ด ์žˆ์œผ๋ฉด ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” 2์ด๋‹ค. - - ํžŒํŠธ: indent(์ธ๋ดํŠธ, ๋“ค์—ฌ์“ฐ๊ธฐ) depth๋ฅผ ์ค„์ด๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋œ๋‹ค. -- 3ํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. -- ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•˜๋„๋ก ์ตœ๋Œ€ํ•œ ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด๋ผ. -- JUnit 5์™€ AssertJ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณธ์ธ์ด ์ •๋ฆฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก์ด ์ •์ƒ ๋™์ž‘ํ•จ์„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ํ™•์ธํ•œ๋‹ค. -- ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)์˜ ๊ธธ์ด๊ฐ€ 15๋ผ์ธ์„ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. - - ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ์ž˜ ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. -- else ์˜ˆ์•ฝ์–ด๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. - - ํžŒํŠธ: if ์กฐ๊ฑด์ ˆ์—์„œ ๊ฐ’์„ returnํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด else๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. - - else๋ฅผ ์“ฐ์ง€ ๋ง๋ผ๊ณ  ํ•˜๋‹ˆ switch/case๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ switch/case๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. -- Java Enum์„ ์ ์šฉํ•œ๋‹ค. -- ๋„๋ฉ”์ธ ๋กœ์ง์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ, UI(System.out, System.in, Scanner) ๋กœ์ง์€ ์ œ์™ธํ•œ๋‹ค. - - ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ์™€ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด ๊ตฌํ˜„ํ•œ๋‹ค. - -### ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - -- [`camp.nextstep.edu.missionutils`](https://github.com/woowacourse-projects/mission-utils)์—์„œ ์ œ๊ณตํ•˜๋Š” `Randoms` ๋ฐ `Console` API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. - - Random ๊ฐ’ ์ถ”์ถœ์€ `camp.nextstep.edu.missionutils.Randoms`์˜ `pickUniqueNumbersInRange()`๋ฅผ ํ™œ์šฉํ•œ๋‹ค. - - ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๊ฐ’์€ `camp.nextstep.edu.missionutils.Console`์˜ `readLine()`์„ ํ™œ์šฉํ•œ๋‹ค. - -#### ์‚ฌ์šฉ ์˜ˆ์‹œ - -```java -List numbers = Randoms.pickUniqueNumbersInRange(1, 45, 6); -``` - -### Lotto ํด๋ž˜์Šค - -- ์ œ๊ณต๋œ `Lotto` ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. -- `Lotto`์— ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค. -- `numbers`์˜ ์ ‘๊ทผ ์ œ์–ด์ž์ธ private์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. -- `Lotto`์— ํ•„๋“œ(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜)๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค. -- `Lotto`์˜ ํŒจํ‚ค์ง€ ๋ณ€๊ฒฝ์€ ๊ฐ€๋Šฅํ•˜๋‹ค. - -```java -public class Lotto { - private final List numbers; - - public Lotto(List numbers) { - validate(numbers); - this.numbers = numbers; - } - - private void validate(List numbers) { - if (numbers.size() != 6) { - throw new IllegalArgumentException(); - } - } - - // TODO: ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ -} -``` +|-- game +| |--CountMatch (์ˆซ์ž ์ผ์น˜์—ฌ๋ถ€ ํŒ๋ณ„, ๋‹น์ฒจ์•ก ํŒ๋ณ„) +| |--Game (๊ฒŒ์ž„ ์‹œ์ž‘) +| |--MakeNumber (๋žœ๋ค ๋ฒˆํ˜ธ ์ถ”์ถœ) +|-- input +| |--CheckInput (input ์˜ˆ์™ธ ํŒ๋ณ„) +| |--Input (๊ตฌ์ž… ๊ธˆ์•ก, ๋‹น์ฒจ ๋ฒˆํ˜ธ, ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ž…๋ ฅ) +|-- lotto +| |--Lotto (๋กœ๋˜) +|-- print +| |--Print (๋‹ด์ฒญ ํ†ต๊ณ„, ๋žœ๋ค ๋ฒˆํ˜ธ, ์ˆ˜์ต๋ฅ  ์ถœ๋ ฅ) +|-- result +| |--Awards (๋ณด์ƒ๊ธˆ ์ฑ…์ •) +| |--Count (๋กœ๋˜ ๋‹น์ฒจ ์ˆ˜๋Ÿ‰ ๊ฒฐ๊ณผ ํ†ต๊ณ„) +| |--Result (๋กœ๋˜ ์ผ์น˜์—ฌ๋ถ€ ๊ณ„์‚ฐ๊ธฐ) +|-- user +| |--User (์œ ์ €๋ณ„ ํ™˜๊ธ‰์•ก) + + + +#๊ธฐ๋Šฅ๊ตฌํ˜„ +1. ๊ตฌ๋งค ๊ธˆ์•ก ์ž…๋ ฅ๋ฐ›๊ธฐ +2. ๊ตฌ๋งค ์ˆ˜๋Ÿ‰ ํ™•์ธ +3. ์ˆ˜๋Ÿ‰์— ๋”ฐ๋ฅธ ๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ +4. ์ƒ์„ฑ๋œ ๋กœ๋˜ ๋ฒˆํ˜ธ ๋ณด์—ฌ์ฃผ๊ธฐ +5. ๋‹น์ฒจ ๋ฒˆํ˜ธ, ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ž…๋ ฅ +6. ๊ฒฐ๊ณผ ์ง‘๊ณ„ +7. ๊ฒฐ๊ณผ ์ถœ๋ ฅ diff --git a/src/main/java/lotto/Application.java b/src/main/java/lotto/Application.java index 367ee30584..17afb27e84 100644 --- a/src/main/java/lotto/Application.java +++ b/src/main/java/lotto/Application.java @@ -1,7 +1,22 @@ package lotto; +import lotto.game.game.CountMatch; +import lotto.game.game.LottoCountMatch; +import lotto.game.game.Game; +import lotto.game.game.LottoGame; +import lotto.game.input.Input; +import lotto.game.input.LottoInput; +import lotto.game.print.LottoPrint; +import lotto.game.print.Print; + public class Application { public static void main(String[] args) { // TODO: ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ + Input input = new LottoInput(); + Print print = new LottoPrint(); + CountMatch countMatch = new LottoCountMatch(); + + Game lottoGame = new LottoGame(input, print, countMatch); + lottoGame.start(); } } \ No newline at end of file diff --git a/src/main/java/lotto/game/constant/InputMessage.java b/src/main/java/lotto/game/constant/InputMessage.java new file mode 100644 index 0000000000..363c3f04a8 --- /dev/null +++ b/src/main/java/lotto/game/constant/InputMessage.java @@ -0,0 +1,18 @@ +package lotto.game.constant; + +public enum InputMessage { + + INPUT_PURCHASE_PRICE("๊ตฌ์ž… ๊ธˆ์•ก์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."), + INPUT_NUMBERS("๋‹น์ฒจ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”"), + INPUT_BONUS_NUMBER("๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”"); + + private final String string; + + InputMessage(String string){ + this.string = string; + } + + public String getString(){ + return string; + } +} diff --git a/src/main/java/lotto/game/constant/NumberRange.java b/src/main/java/lotto/game/constant/NumberRange.java new file mode 100644 index 0000000000..cfe09ef30a --- /dev/null +++ b/src/main/java/lotto/game/constant/NumberRange.java @@ -0,0 +1,24 @@ +package lotto.game.constant; + +public enum NumberRange { + RESULT_START(3), + RESULT_END(6), + RANDOM_START(1), + RANDOM_END(45), + RANDOM_COUNT(6); + + public int value() { + return value; + } + + private final int value; + + NumberRange(int value) { + this.value = value; + } + + @Override + public String toString() { + return String.valueOf(value); + } +} diff --git a/src/main/java/lotto/game/constant/WinningReward.java b/src/main/java/lotto/game/constant/WinningReward.java new file mode 100644 index 0000000000..1378ea4266 --- /dev/null +++ b/src/main/java/lotto/game/constant/WinningReward.java @@ -0,0 +1,24 @@ +package lotto.game.constant; + +public enum WinningReward { + SIX_RIGHT(2000000000), + FIVE_AND_BONUS_RIGHT(30000000), + FIVE_RIGHT(1500000), + FOUR_RIGHT(50000), + THREE_RIGHT(5000); + + public int value() { + return value; + } + + private final int value; + + WinningReward(int value) { + this.value = value; + } + + @Override + public String toString() { + return String.valueOf(value); + } +} diff --git a/src/main/java/lotto/game/game/CountMatch.java b/src/main/java/lotto/game/game/CountMatch.java new file mode 100644 index 0000000000..9d034b3d78 --- /dev/null +++ b/src/main/java/lotto/game/game/CountMatch.java @@ -0,0 +1,11 @@ +package lotto.game.game; + +import lotto.game.lotto.Lotto; +import lotto.game.lotto.LottoCount; + +import java.util.List; + +public interface CountMatch { + LottoCount countMatchNumber(List winningNumber, Integer bonusNumber, Lotto lotto); + int countMatchReward(LottoCount lottoCount); +} diff --git a/src/main/java/lotto/game/game/Game.java b/src/main/java/lotto/game/game/Game.java new file mode 100644 index 0000000000..f08ae05b57 --- /dev/null +++ b/src/main/java/lotto/game/game/Game.java @@ -0,0 +1,5 @@ +package lotto.game.game; + +public interface Game { + void start(); +} diff --git a/src/main/java/lotto/game/game/LottoCountMatch.java b/src/main/java/lotto/game/game/LottoCountMatch.java new file mode 100644 index 0000000000..d8bf1b3843 --- /dev/null +++ b/src/main/java/lotto/game/game/LottoCountMatch.java @@ -0,0 +1,52 @@ +package lotto.game.game; + +import lotto.game.lotto.Lotto; +import lotto.game.lotto.LottoCount; +import java.util.List; + +import static lotto.game.constant.WinningReward.*; + +public class LottoCountMatch implements CountMatch { + @Override + public LottoCount countMatchNumber(List winningNumber, Integer bonusNumber, Lotto lotto) { + int cnt = 0; + int bonusCnt = 0; + ListlottoNumber = lotto.getLottoNumber(); + for (Integer num : lottoNumber) { + if (winningNumber.contains(num)) { + cnt++; + } + } + if(lottoNumber.contains(bonusNumber)){ + bonusCnt++; + } + LottoCount lottoCount = new LottoCount(cnt,bonusCnt); + + return lottoCount; // lottoCount ๊ฐ์ฒด๋กœ ๋ฐ˜ํ™˜ + } + @Override + public int countMatchReward(LottoCount lottoCount){ + int reward = 0; + int cnt = lottoCount.getCnt(); + int bonusCnt = lottoCount.getBonusCnt(); + + if(cnt==3){ + reward += THREE_RIGHT.value(); + } + if(cnt==4){ + reward += FOUR_RIGHT.value(); + } + if(cnt==5){ + if(bonusCnt==1){ + reward += FIVE_AND_BONUS_RIGHT.value(); + } + if(bonusCnt==0){ + reward += FIVE_RIGHT.value(); + } + } + if(cnt==6){ + reward += SIX_RIGHT.value(); + } + return reward; // lottoCount ๊ฐ์ฒด reward ๊ณ„์‚ฐ ํ›„ return + } +} diff --git a/src/main/java/lotto/game/game/LottoGame.java b/src/main/java/lotto/game/game/LottoGame.java new file mode 100644 index 0000000000..b35399a9ce --- /dev/null +++ b/src/main/java/lotto/game/game/LottoGame.java @@ -0,0 +1,72 @@ +package lotto.game.game; + +import lotto.game.input.Input; +import lotto.game.lotto.Lotto; +import lotto.game.print.Print; +import lotto.game.lotto.LottoCount; + +import java.util.ArrayList; +import java.util.List; + +import static lotto.game.game.MakeNumber.makeRandomLottoNumbers; + +public class LottoGame implements Game{ + + private final Input input; + private final Print print; + private final CountMatch countMatch; + + public LottoGame(Input input, Print print, CountMatch countMatch){ + this.input = input; + this.print = print; + this.countMatch = countMatch; + } + + @Override + public void start() { + // 1. ์ˆ˜๋Ÿ‰ ์ž…๋ ฅ๋ฐ›๊ธฐ + Integer purchaseMoney = input.getPurchaseMoney(); + if(purchaseMoney==-1){ + // error ๋ฐœ์ƒ + return; + } + + // 2. ๊ตฌ๋งค์ˆ˜๋Ÿ‰ check + int cycle = purchaseMoney / 1000; + print.printPurchaseCount(cycle); + + // 3. ์ˆ˜๋Ÿ‰๋งŒํผ ๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ + List lottoList = makeRandomLottoNumbers(cycle); + + // 4. ์ƒ์„ฑ๋œ ๋กœ๋˜๋ฒˆํ˜ธ ๋ณด์—ฌ์ฃผ๊ธฐ + print.printNumberList(lottoList); + + // 5. ๋‹น์ฒจ ๋ฒˆํ˜ธ, ๋ณด๋„ˆ์Šค ๋ฒˆํ˜ธ ์ž…๋ ฅ๋ฐ›๊ธฐ + ArrayList winningNumber = input.getWinningNumbers(); + Integer bonusNumber = input.getBonusNumber(); + + + // 6. ๊ฒฐ๊ณผ ์ง‘๊ณ„ !!! + ListlottoCountList = new ArrayList<>(); + for(Lotto lotto : lottoList){ + LottoCount lottoCount = countMatch.countMatchNumber(winningNumber, bonusNumber, lotto); + lottoCountList.add(lottoCount); + } + + int totalReward = 0; + for(LottoCount lottoCount : lottoCountList){ + int reward = countMatch.countMatchReward(lottoCount); + totalReward += reward; + } + + + // 7. ๊ฒฐ๊ณผ ์ถœ๋ ฅ + print.printResultStart(); + print.printResult(lottoCountList); + print.printRateOfReturn(purchaseMoney,totalReward); + } + + + + +} diff --git a/src/main/java/lotto/game/game/MakeNumber.java b/src/main/java/lotto/game/game/MakeNumber.java new file mode 100644 index 0000000000..ed8aa74ed6 --- /dev/null +++ b/src/main/java/lotto/game/game/MakeNumber.java @@ -0,0 +1,24 @@ +package lotto.game.game; + +import camp.nextstep.edu.missionutils.Randoms; +import lotto.game.lotto.Lotto; +import java.util.List; + +import static lotto.game.constant.NumberRange.*; + +public class MakeNumber { + + public static List makeRandomLottoNumbers(int cycle, ListlottoList) { + for (int i = 0; i < cycle; i++) { + // ๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ + List numbers = Randoms.pickUniqueNumbersInRange(RANDOM_START.value(), RANDOM_END.value(), RANDOM_COUNT.value()); + // ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ + //Collections.sort(numbers); + + // ๋กœ๋˜ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด ๋กœ๋˜ ๋ฆฌ์ŠคํŠธ์— ๋„ฃ์–ด์ฃผ๊ธฐ + Lotto lotto = new Lotto(numbers); + lottoList.add(lotto); + } + return lottoList; + } +} diff --git a/src/main/java/lotto/game/input/CheckInput.java b/src/main/java/lotto/game/input/CheckInput.java new file mode 100644 index 0000000000..459007b6df --- /dev/null +++ b/src/main/java/lotto/game/input/CheckInput.java @@ -0,0 +1,19 @@ +package lotto.game.input; + +public class CheckInput { + + static void purchaseCheck(String str) { + + int number; + try { + number = Integer.parseInt(str); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("[ERROR] ์ˆซ์ž ํ˜•์‹์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค"); + } + + if (number % 1000 != 0 || number < 1000) { + throw new IllegalArgumentException("[ERROR] 1000์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ์ˆ˜๋งŒ ์ž…๋ ฅํ•˜์„ธ์š”"); + } + } + +} diff --git a/src/main/java/lotto/game/input/Input.java b/src/main/java/lotto/game/input/Input.java new file mode 100644 index 0000000000..b841e2df10 --- /dev/null +++ b/src/main/java/lotto/game/input/Input.java @@ -0,0 +1,12 @@ +package lotto.game.input; + +import java.util.ArrayList; + +public interface Input { + + ArrayList getWinningNumbers(); + + Integer getPurchaseMoney(); + + Integer getBonusNumber(); +} diff --git a/src/main/java/lotto/game/input/LottoInput.java b/src/main/java/lotto/game/input/LottoInput.java new file mode 100644 index 0000000000..0f3b51e437 --- /dev/null +++ b/src/main/java/lotto/game/input/LottoInput.java @@ -0,0 +1,48 @@ +package lotto.game.input; + +import camp.nextstep.edu.missionutils.Console; +import java.util.ArrayList; + +import static lotto.game.constant.InputMessage.*; + +public class LottoInput implements Input { + + @Override + public Integer getPurchaseMoney() { + System.out.println(INPUT_PURCHASE_PRICE.getString()); + String str = Console.readLine(); + + try { + CheckInput.purchaseCheck(str); + }catch (IllegalArgumentException e){ + System.out.println(e.getMessage()); + return -1; + } + + int purchase = Integer.parseInt(str); + System.out.println(); + return purchase; + } + + @Override + public ArrayList getWinningNumbers() { + System.out.println(INPUT_NUMBERS.getString()); + String str = Console.readLine(); + String[] split = str.split(","); + + ArrayListarrayList = new ArrayList<>(); + for (String s : split) { + arrayList.add(Integer.valueOf(s)); + } + System.out.println(); + return arrayList; + } + + @Override + public Integer getBonusNumber() { + System.out.println(INPUT_BONUS_NUMBER.getString()); + Integer bonusNumber = Integer.valueOf(Console.readLine()); + System.out.println(); + return bonusNumber; + } +} diff --git a/src/main/java/lotto/game/lotto/Lotto.java b/src/main/java/lotto/game/lotto/Lotto.java new file mode 100644 index 0000000000..6124fa2fc7 --- /dev/null +++ b/src/main/java/lotto/game/lotto/Lotto.java @@ -0,0 +1,24 @@ +package lotto.game.lotto; + +import java.util.List; + +public class Lotto { + private final List numbers; + + public List getLottoNumber(){ + return this.numbers; + } + + public Lotto(List numbers) { + validate(numbers); + this.numbers = numbers; + } + + private void validate(List numbers) { + if (numbers.size() != 6) { + throw new IllegalArgumentException(); + } + } + + // TODO: ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ตฌํ˜„ +} \ No newline at end of file diff --git a/src/main/java/lotto/game/print/LottoPrint.java b/src/main/java/lotto/game/print/LottoPrint.java new file mode 100644 index 0000000000..2d97e13d23 --- /dev/null +++ b/src/main/java/lotto/game/print/LottoPrint.java @@ -0,0 +1,80 @@ +package lotto.game.print; + +import lotto.game.lotto.Lotto; +import lotto.game.result.LottoCount; + +import java.text.DecimalFormat; +import java.util.List; +import static lotto.game.constant.NumberRange.*; + +public class LottoPrint implements Print{ + + private final int[] awards = new int[10]; + + @Override + public void printResultStart(){ + System.out.println("๋‹น์ฒจ ํ†ต๊ณ„"); + System.out.println("---"); + } + @Override + public void printNumberList(List lottoList) { + for (Lotto lotto : lottoList) { + System.out.println(lotto.getLottoNumber()); + } + System.out.println(); + } + @Override + public void printRateOfReturn(Integer purchaseMoney, Integer rewards) { + double percent = (double) rewards / purchaseMoney * 100; + double roundedPercent = Math.round(percent * 10.0) / 10.0; + System.out.println("์ด ์ˆ˜์ต๋ฅ ์€ " + roundedPercent+"%์ž…๋‹ˆ๋‹ค."); + } + + @Override + public void printResult(ListlottoCountList){ + awards[3]=5000; + awards[4]=50000; + awards[5]=1500000; + awards[6]=2000000000; + int bonusAwards = 30000000; + + int[] result = new int[10]; + int[] bonusResult = new int[10]; + + for(LottoCount lottoCount : lottoCountList){ + int cnt = lottoCount.getCnt(); + int bonusCnt = lottoCount.getBonusCnt(); + + result[cnt]++; + if(bonusCnt==1){ + bonusResult[cnt]++; + } + } + for(int i = RESULT_START.value(); i<= RESULT_END.value(); i++){ + String printMessage = ""; + printMessage += i+"๊ฐœ ์ผ์น˜ "; + // 5000์› + DecimalFormat decimalFormat = new DecimalFormat("#,###"); + String formattedValue = "(" + decimalFormat.format(awards[i]) + "์›) - "; + printMessage += formattedValue; + printMessage += result[i]+"๊ฐœ"; + + + if(i==5){ + printMessage += '\n'; + printMessage += i+"๊ฐœ ์ผ์น˜, ๋ณด๋„ˆ์Šค ๋ณผ ์ผ์น˜ "; + formattedValue = "(" + decimalFormat.format(bonusAwards) + "์›) - "; + printMessage+=formattedValue; + printMessage += bonusResult[i]+"๊ฐœ"; + } + + System.out.println(printMessage); + } + } + + + @Override + public void printPurchaseCount(int cnt){ + System.out.println(cnt + "๊ฐœ๋ฅผ ๊ตฌ๋งคํ–ˆ์Šต๋‹ˆ๋‹ค."); + } +} diff --git a/src/main/java/lotto/game/print/Print.java b/src/main/java/lotto/game/print/Print.java new file mode 100644 index 0000000000..1c3966ce62 --- /dev/null +++ b/src/main/java/lotto/game/print/Print.java @@ -0,0 +1,18 @@ +package lotto.game.print; + +import lotto.game.lotto.Lotto; +import lotto.game.result.LottoCount; + +import java.util.List; + +public interface Print { + void printNumberList(List lottoList); + + void printResultStart(); + + void printResult(ListlottoCountList); + + void printRateOfReturn(Integer purchaseMoney, Integer rewards); + + void printPurchaseCount(int cnt); +} diff --git a/src/main/java/lotto/game/result/LottoCount.java b/src/main/java/lotto/game/result/LottoCount.java new file mode 100644 index 0000000000..eff08c4c02 --- /dev/null +++ b/src/main/java/lotto/game/result/LottoCount.java @@ -0,0 +1,20 @@ +package lotto.game.result; + +public class LottoCount { + + private final int cnt; // ๋ช‡๊ฐœ ๋‹น์ฒจ์ธ์ง€ + private final int bonusCnt; + + public LottoCount(int cnt, int bonusCnt){ + this.cnt=cnt; + this.bonusCnt = bonusCnt; + } + + public int getCnt() { + return cnt; + } + + public int getBonusCnt() { + return bonusCnt; + } +} diff --git a/src/test/java/lotto/game/game/LottoCountMatchTest.java b/src/test/java/lotto/game/game/LottoCountMatchTest.java new file mode 100644 index 0000000000..b6a855cabe --- /dev/null +++ b/src/test/java/lotto/game/game/LottoCountMatchTest.java @@ -0,0 +1,66 @@ +package lotto.game.game; + +import lotto.game.lotto.Lotto; +import lotto.game.lotto.LottoCount; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +import static lotto.game.constant.WinningReward.*; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class LottoCountMatchTest { + + LottoCountMatch lottoCountMatch = new LottoCountMatch(); + + @ParameterizedTest(name = "[{index}] winning : {0} bonus : {1} myNum : {2} ํ…Œ์ŠคํŠธ") + @MethodSource() + void countMatchNumber(ListwinningNumber, int bonusNumber, Listnumbers, + int expectedCnt, int expectedBonusCnt) { + // + Lotto lotto = new Lotto(numbers); + + // + LottoCount lottoCount = lottoCountMatch.countMatchNumber(winningNumber, bonusNumber, lotto); + + // + assertEquals(expectedCnt,lottoCount.getCnt(),"cnt ๊ฐ’์ด ํ‹€๋ฆฝ๋‹ˆ๋‹ค."); + assertEquals(expectedBonusCnt,lottoCount.getBonusCnt(),"bonusCnt ๊ฐ’์ด ํ‹€๋ฆฝ๋‹ˆ๋‹ค."); + } + static Stream countMatchNumber() { + return Stream.of( + Arguments.of(Arrays.asList(1, 2, 3, 4, 5, 6),7,Arrays.asList(1, 2, 3, 4, 5, 7),5,1), + Arguments.of(Arrays.asList(1, 2, 3, 4, 5, 6),7,Arrays.asList(1, 2, 3, 4, 5, 6),6,0), + Arguments.of(Arrays.asList(1, 2, 3, 4, 5, 6),7,Arrays.asList(4, 5, 6, 7, 8, 9),3,1) + ); + } + + @ParameterizedTest(name = "[{index}] cnt : {0} bonusCnt : {1} expectedResult : {2} ํ…Œ์ŠคํŠธ") + @MethodSource() + void countMatchReward(int cnt, int bonusCnt, int expectedResult) { + // + LottoCount lottoCount = new LottoCount(cnt,bonusCnt); + + // + int reward = lottoCountMatch.countMatchReward(lottoCount); + + // + assertEquals(expectedResult,reward); + } + static Stream countMatchReward() { + return Stream.of( + Arguments.of(6,0,SIX_RIGHT.value()), + Arguments.of(5,1,FIVE_AND_BONUS_RIGHT.value()), + Arguments.of(5,0,FIVE_RIGHT.value()), + Arguments.of(4,0,FOUR_RIGHT.value()), + Arguments.of(3,0,THREE_RIGHT.value()), + Arguments.of(2,0,0), + Arguments.of(1,0,0), + Arguments.of(0,0,0) + ); + } +} \ No newline at end of file