From 810fbc74fffde9674c06aa76714a22d92a106dea Mon Sep 17 00:00:00 2001 From: MAGHC Date: Sun, 5 Nov 2023 20:08:55 +0900 Subject: [PATCH 01/14] =?UTF-8?q?docs:=20README.md=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ docs/image.png | Bin 0 -> 115054 bytes 2 files changed, 70 insertions(+) create mode 100644 docs/README.md create mode 100644 docs/image.png diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000000..9f145049ca --- /dev/null +++ b/docs/README.md @@ -0,0 +1,70 @@ +## 흐름파악 + +![Alt text](image.png) + +## 기능구현 목록 + +### 유저스토리 + +1. 유저는 구입 금액을 입력할 수 있다. + +- 1000원 단위로 받는다 + +2. 유저는 당첨 번호를 입력할 수 있다. + +- 각 1~45 범위의 숫자를 입력해야된다. +- 쉼표(,)기준으로 구분한다. +- 6개를 입력해야 한다. + +3. 유저는 보너스 번호를 입력할 수 있다. + +- 1~45 범위의 숫자 한개만 입력할 수 있다. + +4. 유저는 구입한 금액만큼 발행한 로또의 수량과 번호를 볼 수있다. + +- 오름차순이어야 한다. +- 갯수를 보여줘야된다. +- 배열 형태로 보여준다. + +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원 + +- 수익률은 소수점 둘째자리에서 반올림 한다. + +6. 유저는 예외 상황시 에러문구를 힌트로 받을 수 있다. + +- 에러 문구는 "[ERROR]"로 시작해야 한다 + +## 요구사항 + +indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다. +예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. +힌트: indent(인덴트, 들여쓰기) depth를 줄이는 좋은 방법은 함수(또는 메서드)를 분리하면 된다. + +함수(또는 메서드)가 한 가지 일만 하도록 최대한 작게 만들어라. +Jest를 이용하여 본인이 정리한 기능 목록이 정상 동작함을 테스트 코드로 확인한다. + +함수(또는 메서드)의 길이가 15라인을 넘어가지 않도록 구현한다. + +함수(또는 메서드)가 한 가지 일만 잘 하도록 구현한다. + +도메인 로직에 단위 테스트를 구현해야 한다. 단, UI(Console.readLineAsync, Console.print) 로직에 대한 단위 테스트는 제외한다. + +핵심 로직을 구현하는 코드와 UI를 담당하는 로직을 구분한다. + +라이브러리 사용해서 랜덤 및 출력 구현 + +## 제약사항 + +Lotto 클래스 +제공된 Lotto 클래스를 활용해 구현해야 한다. +numbers의 # prefix를 변경할 수 없다. +Lotto에 필드를 추가할 수 없다. diff --git a/docs/image.png b/docs/image.png new file mode 100644 index 0000000000000000000000000000000000000000..6384dae082ff16830c5f00312c67e42947d77af3 GIT binary patch literal 115054 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÷X=f; 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�uzN1#1YF>|*Gy3g!eb*aE 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 AeE Date: Sun, 5 Nov 2023 20:09:05 +0900 Subject: [PATCH 02/14] =?UTF-8?q?chore=20:=20airbnb=20eslint=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .eslintrc diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000000..670447f603 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,15 @@ +{ + "extends": "airbnb-base", + "parserOptions": { + "ecmaVersion": 13 + }, + "rules": { + "import/extensions": [ + "error", + "always", + { + "js": "always" + } + ] + } +} From 567334d6111d3a6ace454c2ab7db45a8674be3d7 Mon Sep 17 00:00:00 2001 From: MAGHC Date: Sun, 5 Nov 2023 20:32:00 +0900 Subject: [PATCH 03/14] =?UTF-8?q?docs:=20edit=20README=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=EA=B5=AC=ED=98=84=20=EB=AA=A9=EB=A1=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README.md b/docs/README.md index 9f145049ca..001dd2455d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,6 +15,7 @@ - 각 1~45 범위의 숫자를 입력해야된다. - 쉼표(,)기준으로 구분한다. - 6개를 입력해야 한다. +- 중복되지 않아야 한다. 3. 유저는 보너스 번호를 입력할 수 있다. From 8b2f7468ef7449b56876fe11dfb4ad04cab8bbbb Mon Sep 17 00:00:00 2001 From: MAGHC Date: Mon, 6 Nov 2023 22:01:14 +0900 Subject: [PATCH 04/14] =?UTF-8?q?docs:=20Edit=20README=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=EA=B5=AC=ED=98=84=EB=AA=A9=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/README.md b/docs/README.md index 001dd2455d..f1961fe219 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,7 +8,9 @@ 1. 유저는 구입 금액을 입력할 수 있다. -- 1000원 단위로 받는다 +- 1000원 단위로 받는다 (여기서 소수점도 걸림) +- 숫자만 입력해야된다 +- 양의 정수만 입력해야된다 2. 유저는 당첨 번호를 입력할 수 있다. From 454c3b66b8de897be0258f4ef061b379a3fadca0 Mon Sep 17 00:00:00 2001 From: MAGHC Date: Wed, 8 Nov 2023 12:55:32 +0900 Subject: [PATCH 05/14] =?UTF-8?q?feat=20:=20=EC=9C=A0=EC=A0=80=EB=8A=94=20?= =?UTF-8?q?=EA=B5=AC=EC=9E=85=20=EA=B8=88=EC=95=A1=EC=9D=84=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Constant/Constant.js | 9 +++++++++ src/CustomError/CustonError.js | 7 +++++++ src/Receiver/Receiver.js | 14 ++++++++++++++ src/Validator/Validator.js | 30 ++++++++++++++++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 src/Constant/Constant.js create mode 100644 src/CustomError/CustonError.js create mode 100644 src/Receiver/Receiver.js create mode 100644 src/Validator/Validator.js diff --git a/src/Constant/Constant.js b/src/Constant/Constant.js new file mode 100644 index 0000000000..9bfca88ecd --- /dev/null +++ b/src/Constant/Constant.js @@ -0,0 +1,9 @@ +const ERROR_MEESAGE = Object.freeze({ + NOT_VALID_MONEY: '1000원 단위로 입력해 주세요', + NOT_MINUS_NUMBER: '양의 정수를 입력해주세요', + ISNAN_ERROR_MSG: '숫자만 입력해주세요', +}); + +const MONEY_UNIT = 1000; + +export { ERROR_MEESAGE, MONEY_UNIT }; diff --git a/src/CustomError/CustonError.js b/src/CustomError/CustonError.js new file mode 100644 index 0000000000..12c5f8383b --- /dev/null +++ b/src/CustomError/CustonError.js @@ -0,0 +1,7 @@ +const CustomError = class { + constructor(errorMsg) { + throw new Error(`[ERROR] ${errorMsg}`); + } +}; + +export default CustomError; diff --git a/src/Receiver/Receiver.js b/src/Receiver/Receiver.js new file mode 100644 index 0000000000..33699fd75a --- /dev/null +++ b/src/Receiver/Receiver.js @@ -0,0 +1,14 @@ +import { MissionUtils } from '@woowacourse/mission-utils'; +import { MONEY_UNIT } from '../Constant/Constant.js'; + +const Receiver = class { + static async receiveMoney() { + const answer = await MissionUtils.Console.readLineAsync( + `구입금액을 ${MONEY_UNIT}원 단위로 입력해 주세요.`, + ); + + return answer; + } +}; + +export default Receiver; diff --git a/src/Validator/Validator.js b/src/Validator/Validator.js new file mode 100644 index 0000000000..6a8785e27f --- /dev/null +++ b/src/Validator/Validator.js @@ -0,0 +1,30 @@ +import { ERROR_MEESAGE, MONEY_UNIT } from '../Constant/Constant.js'; + +import CustomError from '../CustomError/CustonError.js'; + +// 추후 테스트하기 좋게 변경하기 + +const Validator = class { + static checkMoneyUnit(money) { + if (+money % MONEY_UNIT !== 0) { + throw new CustomError(ERROR_MEESAGE.NOT_VALID_MONEY); + } + + return true; + } + + static checkPositiveInt(number) { + if (Number.isInteger(+number) && +number < 0) { + throw new CustomError(ERROR_MEESAGE.NOT_MINUS_NUMBER); + } + + return true; + } + + static checkIsNaN(number) { + if (Number.isNaN(+number)) throw new CustomError(ERROR_MEESAGE.ISNAN_ERROR_MSG); + return true; + } +}; + +export default Validator; From 494e020b64b0d69f1a62a3a7c602fb264d8a78b7 Mon Sep 17 00:00:00 2001 From: MAGHC Date: Wed, 8 Nov 2023 12:58:21 +0900 Subject: [PATCH 06/14] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EC=9D=98=20?= =?UTF-8?q?=EA=B5=AC=EB=A7=A4=20=EA=B4=80=EB=A0=A8=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=EB=A5=BC=20=ED=95=98=EB=82=98=EB=A1=9C=20?= =?UTF-8?q?=EB=AC=B6=EB=8A=94=20=ED=95=A8=EC=88=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Validator/Validator.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Validator/Validator.js b/src/Validator/Validator.js index 6a8785e27f..77e764ba08 100644 --- a/src/Validator/Validator.js +++ b/src/Validator/Validator.js @@ -5,6 +5,12 @@ import CustomError from '../CustomError/CustonError.js'; // 추후 테스트하기 좋게 변경하기 const Validator = class { + static checkPurchaseAmount(money) { + Validator.checkIsNaN(money); + Validator.checkPositiveInt(money); + Validator.checkMoneyUnit(money); + } + static checkMoneyUnit(money) { if (+money % MONEY_UNIT !== 0) { throw new CustomError(ERROR_MEESAGE.NOT_VALID_MONEY); From 1e0d18a68683e02bc164a3d51cad34e3666c9194 Mon Sep 17 00:00:00 2001 From: MAGHC Date: Wed, 8 Nov 2023 14:18:15 +0900 Subject: [PATCH 07/14] =?UTF-8?q?fix=20:=20Validator=20checkIsNaN=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=BB=A8=EB=94=94=EC=85=98=20=EC=A4=91=EA=B4=84?= =?UTF-8?q?=ED=98=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Validator/Validator.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Validator/Validator.js b/src/Validator/Validator.js index 77e764ba08..84d91054d6 100644 --- a/src/Validator/Validator.js +++ b/src/Validator/Validator.js @@ -28,7 +28,9 @@ const Validator = class { } static checkIsNaN(number) { - if (Number.isNaN(+number)) throw new CustomError(ERROR_MEESAGE.ISNAN_ERROR_MSG); + if (Number.isNaN(+number)) { + throw new CustomError(ERROR_MEESAGE.ISNAN_ERROR_MSG); + } return true; } }; From bd6a339ca504a36b4bccedfaf134ba685614649d Mon Sep 17 00:00:00 2001 From: MAGHC Date: Wed, 8 Nov 2023 21:15:47 +0900 Subject: [PATCH 08/14] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EB=8A=94=20?= =?UTF-8?q?=EB=8B=B9=EC=B2=A8=20=EB=B2=88=ED=98=B8=EB=A5=BC=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Constant/Constant.js | 12 +++++++++- src/Converter/Converter.js | 11 +++++++++ src/Measurer/SizeMeasurer.js | 11 +++++++++ src/Receiver/Receiver.js | 15 +++++++++++- src/Validator/Validator.js | 46 +++++++++++++++++++++++++++++++++--- 5 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 src/Converter/Converter.js create mode 100644 src/Measurer/SizeMeasurer.js diff --git a/src/Constant/Constant.js b/src/Constant/Constant.js index 9bfca88ecd..ef86d73ee1 100644 --- a/src/Constant/Constant.js +++ b/src/Constant/Constant.js @@ -2,8 +2,18 @@ const ERROR_MEESAGE = Object.freeze({ NOT_VALID_MONEY: '1000원 단위로 입력해 주세요', NOT_MINUS_NUMBER: '양의 정수를 입력해주세요', ISNAN_ERROR_MSG: '숫자만 입력해주세요', + RANGE_ERROR_MSG: '1에서 45사이의 수만 입력해주세요', + NOT_VALID_SIZE: '6개의 로또를 입력해주세요', + NOT_DUPLICATE: '중복되지 않은 수를 입력해주세요', }); const MONEY_UNIT = 1000; -export { ERROR_MEESAGE, MONEY_UNIT }; +const RANGE_START_NUM = 1; +const RANGE_END_NUM = 45; +const LOTTIO_SIZE = 6; + +// prettier-ignore +export { + ERROR_MEESAGE, MONEY_UNIT, RANGE_START_NUM, RANGE_END_NUM, LOTTIO_SIZE, +}; diff --git a/src/Converter/Converter.js b/src/Converter/Converter.js new file mode 100644 index 0000000000..655c8f8c1c --- /dev/null +++ b/src/Converter/Converter.js @@ -0,0 +1,11 @@ +const Converter = class { + static stringToArray(string) { + return string.split(','); + } + + static arrToSetStructure(arr) { + return new Set(...arr); + } +}; + +export default Converter; diff --git a/src/Measurer/SizeMeasurer.js b/src/Measurer/SizeMeasurer.js new file mode 100644 index 0000000000..789391811f --- /dev/null +++ b/src/Measurer/SizeMeasurer.js @@ -0,0 +1,11 @@ +const SizeMeasurer = class { + static getArrSize(value) { + return value.length; + } + + static getSetStructureSize(value) { + return value.size; + } +}; + +export default SizeMeasurer; diff --git a/src/Receiver/Receiver.js b/src/Receiver/Receiver.js index 33699fd75a..e9cb6f7cc7 100644 --- a/src/Receiver/Receiver.js +++ b/src/Receiver/Receiver.js @@ -1,5 +1,10 @@ import { MissionUtils } from '@woowacourse/mission-utils'; -import { MONEY_UNIT } from '../Constant/Constant.js'; +import { + LOTTIO_SIZE, + MONEY_UNIT, + RANGE_END_NUM, + RANGE_START_NUM, +} from '../Constant/Constant.js'; const Receiver = class { static async receiveMoney() { @@ -9,6 +14,14 @@ const Receiver = class { return answer; } + + static async receiveLottomNumbs() { + const answer = await MissionUtils.Console.readLineAsync( + `${RANGE_START_NUM}~${RANGE_END_NUM} 사이의 당첨 번호 ${LOTTIO_SIZE}개를 입력해 주세요(입력 시','로 구분해주세요).`, + ); + + return answer; + } }; export default Receiver; diff --git a/src/Validator/Validator.js b/src/Validator/Validator.js index 84d91054d6..2cedfc5c0e 100644 --- a/src/Validator/Validator.js +++ b/src/Validator/Validator.js @@ -1,8 +1,14 @@ -import { ERROR_MEESAGE, MONEY_UNIT } from '../Constant/Constant.js'; +import { + ERROR_MEESAGE, + LOTTIO_SIZE, + MONEY_UNIT, + RANGE_END_NUM, + RANGE_START_NUM, +} from '../Constant/Constant.js'; +import Converter from '../Converter/Converter.js'; import CustomError from '../CustomError/CustonError.js'; - -// 추후 테스트하기 좋게 변경하기 +import SizeMeasurer from '../Measurer/SizeMeasurer.js'; const Validator = class { static checkPurchaseAmount(money) { @@ -11,6 +17,15 @@ const Validator = class { Validator.checkMoneyUnit(money); } + static checkLottoNums(lottoArr) { + lottoArr.forEach((lotto) => { + Validator.checkNumRange(lotto); + Validator.checkIsNaN(lotto); + }); + Validator.checkDuplicate(lottoArr); + Validator.checkLength(lottoArr); + } + static checkMoneyUnit(money) { if (+money % MONEY_UNIT !== 0) { throw new CustomError(ERROR_MEESAGE.NOT_VALID_MONEY); @@ -33,6 +48,31 @@ const Validator = class { } return true; } + + static checkNumRange(number) { + if (+number < RANGE_START_NUM || +number > RANGE_END_NUM) { + throw new CustomError(ERROR_MEESAGE.RANGE_ERROR_MSG); + } + return true; + } + + static checkLength(arr) { + if (SizeMeasurer.getArrSize(arr) !== LOTTIO_SIZE) { + throw new CustomError(ERROR_MEESAGE.NOT_VALID_SIZE); + } + return true; + } + + static checkDuplicate(arr) { + // prettier-ignore + if ( + SizeMeasurer.getArrSize(Converter.arrToSetStructure(arr)) + !== SizeMeasurer.getSetStructureSize(arr) + ) { + throw new CustomError(ERROR_MEESAGE.NOT_DUPLICATE); + } + return true; + } }; export default Validator; From b54da4e4b9000936fde3546568b5c8e9a80dd495 Mon Sep 17 00:00:00 2001 From: MAGHC Date: Wed, 8 Nov 2023 21:20:46 +0900 Subject: [PATCH 09/14] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EB=8A=94=20?= =?UTF-8?q?=EB=B3=B4=EB=84=88=EC=8A=A4=20=EC=88=AB=EC=9E=90=EB=A5=BC=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Receiver/Receiver.js | 8 ++++++++ src/Validator/Validator.js | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/src/Receiver/Receiver.js b/src/Receiver/Receiver.js index e9cb6f7cc7..4e45789289 100644 --- a/src/Receiver/Receiver.js +++ b/src/Receiver/Receiver.js @@ -22,6 +22,14 @@ const Receiver = class { return answer; } + + static async receiveBonusNum() { + const answer = await MissionUtils.Console.readLineAsync( + `${RANGE_START_NUM}~${RANGE_END_NUM} 사이의 보너스 숫자를 입력해주세요`, + ); + + return answer; + } }; export default Receiver; diff --git a/src/Validator/Validator.js b/src/Validator/Validator.js index 2cedfc5c0e..8840ff54ae 100644 --- a/src/Validator/Validator.js +++ b/src/Validator/Validator.js @@ -26,6 +26,11 @@ const Validator = class { Validator.checkLength(lottoArr); } + static checkBonusNum(number) { + Validator.checkIsNaN(+number); + Validator.checkNumRange(+number); + } + static checkMoneyUnit(money) { if (+money % MONEY_UNIT !== 0) { throw new CustomError(ERROR_MEESAGE.NOT_VALID_MONEY); From 38e4ff60466d4d759c93240e5bbef84104b74851 Mon Sep 17 00:00:00 2001 From: MAGHC Date: Wed, 8 Nov 2023 21:21:36 +0900 Subject: [PATCH 10/14] =?UTF-8?q?fix:=20receiveNumbs=20=EC=98=A4=ED=83=80?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Receiver/Receiver.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Receiver/Receiver.js b/src/Receiver/Receiver.js index 4e45789289..de2affa800 100644 --- a/src/Receiver/Receiver.js +++ b/src/Receiver/Receiver.js @@ -15,7 +15,7 @@ const Receiver = class { return answer; } - static async receiveLottomNumbs() { + static async receiveLottomNums() { const answer = await MissionUtils.Console.readLineAsync( `${RANGE_START_NUM}~${RANGE_END_NUM} 사이의 당첨 번호 ${LOTTIO_SIZE}개를 입력해 주세요(입력 시','로 구분해주세요).`, ); From 9d0f66e64592c3c79a54f44bf4ed81214cfd0205 Mon Sep 17 00:00:00 2001 From: MAGHC Date: Wed, 8 Nov 2023 23:04:49 +0900 Subject: [PATCH 11/14] =?UTF-8?q?docs:=20edit=20REAMDE.md=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=EA=B5=AC=ED=98=84=20=EB=AA=A9=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/README.md b/docs/README.md index f1961fe219..2857e5cf03 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,6 +25,7 @@ 4. 유저는 구입한 금액만큼 발행한 로또의 수량과 번호를 볼 수있다. +- 구입한 금액 만큼 로또를 생성해야 한다. - 오름차순이어야 한다. - 갯수를 보여줘야된다. - 배열 형태로 보여준다. From 993425284833e777bab00b49d5c82aff7c668232 Mon Sep 17 00:00:00 2001 From: MAGHC Date: Wed, 8 Nov 2023 23:05:57 +0900 Subject: [PATCH 12/14] =?UTF-8?q?feat:=20=EC=9C=A0=EC=A0=80=EB=8A=94=20?= =?UTF-8?q?=EA=B5=AC=EC=9E=85=ED=95=9C=20=EA=B8=88=EC=95=A1=EB=A7=8C?= =?UTF-8?q?=ED=81=BC=20=EB=B0=9C=ED=96=89=ED=95=9C=20=EB=A1=9C=EB=98=90?= =?UTF-8?q?=EC=9D=98=20=EC=88=98=EB=9F=89=EA=B3=BC=20=EB=B2=88=ED=98=B8?= =?UTF-8?q?=EB=A5=BC=20=EB=B3=BC=20=EC=88=98=20=EC=9E=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Aligner/Aligner.js | 7 +++++++ src/Lotto.js | 18 ------------------ src/Lotto/Lotto.js | 22 ++++++++++++++++++++++ src/Lotto/LottoIntergrator.js | 13 +++++++++++++ src/Printer/Printer.js | 16 ++++++++++++++++ 5 files changed, 58 insertions(+), 18 deletions(-) create mode 100644 src/Aligner/Aligner.js delete mode 100644 src/Lotto.js create mode 100644 src/Lotto/Lotto.js create mode 100644 src/Lotto/LottoIntergrator.js create mode 100644 src/Printer/Printer.js diff --git a/src/Aligner/Aligner.js b/src/Aligner/Aligner.js new file mode 100644 index 0000000000..8a2a77690f --- /dev/null +++ b/src/Aligner/Aligner.js @@ -0,0 +1,7 @@ +const Aligner = class { + static alignAscendingArr(arr) { + arr.sort((a, b) => a - b); + } +}; + +export default Aligner; diff --git a/src/Lotto.js b/src/Lotto.js deleted file mode 100644 index cb0b1527e9..0000000000 --- a/src/Lotto.js +++ /dev/null @@ -1,18 +0,0 @@ -class Lotto { - #numbers; - - constructor(numbers) { - this.#validate(numbers); - this.#numbers = numbers; - } - - #validate(numbers) { - if (numbers.length !== 6) { - throw new Error("[ERROR] 로또 번호는 6개여야 합니다."); - } - } - - // TODO: 추가 기능 구현 -} - -export default Lotto; diff --git a/src/Lotto/Lotto.js b/src/Lotto/Lotto.js new file mode 100644 index 0000000000..bfa90e091f --- /dev/null +++ b/src/Lotto/Lotto.js @@ -0,0 +1,22 @@ +import Aligner from '../Aligner/Aligner.js'; +import Validator from '../Validator/Validator.js'; + +class Lotto { + #numbers; + + constructor(numbers) { + Validator.checkLottoNums(numbers); + this.#numbers = numbers; + this.#align(this.#numbers); + } + + #align() { + Aligner.alignAscendingArr(this.#numbers); + } + + getLotto() { + return this.#numbers; + } +} + +export default Lotto; diff --git a/src/Lotto/LottoIntergrator.js b/src/Lotto/LottoIntergrator.js new file mode 100644 index 0000000000..d177ecf030 --- /dev/null +++ b/src/Lotto/LottoIntergrator.js @@ -0,0 +1,13 @@ +const LottoIntergrator = class { + #allLottos = []; + + pushLotto(lotto) { + this.#allLottos.push(lotto); + } + + allLottoInfo() { + return this.#allLottos; + } +}; + +export default LottoIntergrator; diff --git a/src/Printer/Printer.js b/src/Printer/Printer.js new file mode 100644 index 0000000000..cbdb30a3d3 --- /dev/null +++ b/src/Printer/Printer.js @@ -0,0 +1,16 @@ +import { MissionUtils } from '@woowacourse/mission-utils'; + +export default class Printer { + static printPublishInfo(quantity, lottos) { + Printer.printPublishQuantity(quantity); + Printer.printPublishLottos(lottos); + } + + static printPublishLottos(lottos) { + lottos.forEach((lotto) => MissionUtils.Console.print(`[${lotto.join(',')}]`)); + } + + static printPublishQuantity(quantity) { + MissionUtils.Console.print(`${quantity}개를 구매했습니다.`); + } +} From 9b24ef08992d0b08937251fd6ebd329b99a26c6b Mon Sep 17 00:00:00 2001 From: MAGHC Date: Wed, 8 Nov 2023 23:06:24 +0900 Subject: [PATCH 13/14] =?UTF-8?q?fix:=20Converter=20=EC=98=A4=EB=A5=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Converter/Converter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Converter/Converter.js b/src/Converter/Converter.js index 655c8f8c1c..f115ba26ee 100644 --- a/src/Converter/Converter.js +++ b/src/Converter/Converter.js @@ -4,7 +4,7 @@ const Converter = class { } static arrToSetStructure(arr) { - return new Set(...arr); + return new Set(arr); } }; From 2e42a251a78ca0056b92c32e4a64cd6734196b5a Mon Sep 17 00:00:00 2001 From: MAGHC Date: Wed, 8 Nov 2023 23:52:14 +0900 Subject: [PATCH 14/14] =?UTF-8?q?emergency:=20=EC=8B=9C=EA=B0=84=EC=9D=B4?= =?UTF-8?q?=EC=97=86=EB=8B=A4=20...=20=EC=9D=BC=EB=8B=A8=20=EC=BB=A4?= =?UTF-8?q?=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.js | 47 ++++++++++++++++++++++++++++++++++- src/Constant/Constant.js | 10 +++++++- src/Lotto/LottoAnalyzer.js | 22 ++++++++++++++++ src/Lotto/LottoIntergrator.js | 39 +++++++++++++++++++++++++++++ src/Sanitizer/Sanitizer.js | 7 ++++++ src/index.js | 2 +- 6 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 src/Lotto/LottoAnalyzer.js create mode 100644 src/Sanitizer/Sanitizer.js diff --git a/src/App.js b/src/App.js index c38b30d5b2..65f7320744 100644 --- a/src/App.js +++ b/src/App.js @@ -1,5 +1,50 @@ +import { MissionUtils } from '@woowacourse/mission-utils'; +import Converter from './Converter/Converter.js'; +import Lotto from './Lotto/Lotto.js'; +import LottoIntergrator from './Lotto/LottoIntergrator.js'; +import Receiver from './Receiver/Receiver.js'; + +import Validator from './Validator/Validator.js'; +import Printer from './Printer/Printer.js'; + class App { - async play() {} + #userMoney; + + #userSetLottoNums; + + #bonusNum; + + #lottos = new LottoIntergrator(); + + async play() { + this.#userMoney = await Receiver.receiveMoney(); + + Validator.checkPurchaseAmount(this.#userMoney); + + this.#userMoney /= 1000; + + this.generateLottos(); + + Printer.printPublishInfo(this.#userMoney, this.#lottos.allLottoInfo()); + + this.#userSetLottoNums = Converter.stringToArray(await Receiver.receiveLottomNums()); + + Validator.checkLottoNums(this.#userSetLottoNums); + + this.#bonusNum = await Receiver.receiveBonusNum(); + + Validator.checkBonusNum(this.#bonusNum); + + console.log(this.#lottos.saveBoard(this.#userSetLottoNums, this.#bonusNum)); + } + + generateLottos() { + for (let i = 0; i < this.#userMoney; i += 1) { + const lotto = MissionUtils.Random.pickUniqueNumbersInRange(1, 45, 6); + + this.#lottos.pushLotto(new Lotto(lotto).getLotto()); + } + } } export default App; diff --git a/src/Constant/Constant.js b/src/Constant/Constant.js index ef86d73ee1..d0cb1d2190 100644 --- a/src/Constant/Constant.js +++ b/src/Constant/Constant.js @@ -7,6 +7,14 @@ const ERROR_MEESAGE = Object.freeze({ NOT_DUPLICATE: '중복되지 않은 수를 입력해주세요', }); +const WINNING_AMOUNT_UNITS = Object.freeze({ + FIRST_PLACE: 2000000000, + SECOND_PLACE: 30000000, + THIRD_PLACE: 1500000, + FOURTH_PLACE: 50000, + FIFTH_PLACE: 5000, +}); + const MONEY_UNIT = 1000; const RANGE_START_NUM = 1; @@ -15,5 +23,5 @@ const LOTTIO_SIZE = 6; // prettier-ignore export { - ERROR_MEESAGE, MONEY_UNIT, RANGE_START_NUM, RANGE_END_NUM, LOTTIO_SIZE, + ERROR_MEESAGE, MONEY_UNIT, RANGE_START_NUM, RANGE_END_NUM, LOTTIO_SIZE, WINNING_AMOUNT_UNITS, }; diff --git a/src/Lotto/LottoAnalyzer.js b/src/Lotto/LottoAnalyzer.js new file mode 100644 index 0000000000..4af043ad7a --- /dev/null +++ b/src/Lotto/LottoAnalyzer.js @@ -0,0 +1,22 @@ +export const LottoAnalyzer = class { + static getAnalysis(winningNumbers, bonusNumber, lottoNums) { + const matchCount = lottoNums.filter((num) => winningNumbers.includes(num)).length; + const isBonusMatched = lottoNums.includes(bonusNumber); + return LottoAnalyzer.getRank(matchCount, isBonusMatched); + } + + static getRank(matchCount, isBonusMatched) { + if (matchCount < 3) return 0; + if (matchCount === 3) return 5; + if (matchCount === 4) return 4; + if (matchCount === 5) return isBonusMatched ? 2 : 3; + if (matchCount === 6) return 1; + return 0; + } + + static toFixedNumber(number) { + return +number.toFixed(1); + } +}; + +export default LottoAnalyzer; diff --git a/src/Lotto/LottoIntergrator.js b/src/Lotto/LottoIntergrator.js index d177ecf030..0ca380ea00 100644 --- a/src/Lotto/LottoIntergrator.js +++ b/src/Lotto/LottoIntergrator.js @@ -1,6 +1,21 @@ +import { WINNING_AMOUNT_UNITS } from '../Constant/Constant.js'; + +import LottoAnalyzer from './LottoAnalyzer.js'; + const LottoIntergrator = class { #allLottos = []; + #roi; + + #board = { + 1: 0, + 2: 0, + 3: 0, + 4: 0, + 5: 0, + 0: 0, + }; + pushLotto(lotto) { this.#allLottos.push(lotto); } @@ -8,6 +23,30 @@ const LottoIntergrator = class { allLottoInfo() { return this.#allLottos; } + + saveBoard(winNum, bonusNum) { + this.#allLottos.forEach((lottos) => { + this.#board[LottoAnalyzer.getAnalysis(winNum, bonusNum, lottos)] += 1; + }); + + return this.#board; + } + + static getstatistics(totalWinning, purchaseAmount) { + return LottoAnalyzer.toFixedNumber((totalWinning / purchaseAmount) * 0.1); + } + + static totalWinningAmount(winningArray) { + let totalAmount = 0; + winningArray.forEach((winning) => { + if (winning === 1) totalAmount += WINNING_AMOUNT_UNITS.FIRST_PLACE; + if (winning === 2) totalAmount += WINNING_AMOUNT_UNITS.SECOND_PLACEs; + if (winning === 3) totalAmount += WINNING_AMOUNT_UNITS.THIRD_PLACE; + if (winning === 4) totalAmount += WINNING_AMOUNT_UNITS.FOURTH_PLACE; + if (winning === 5) totalAmount += WINNING_AMOUNT_UNITS.FIFTH_PLACE; + }); + return totalAmount; + } }; export default LottoIntergrator; diff --git a/src/Sanitizer/Sanitizer.js b/src/Sanitizer/Sanitizer.js new file mode 100644 index 0000000000..fcf01bcb2c --- /dev/null +++ b/src/Sanitizer/Sanitizer.js @@ -0,0 +1,7 @@ +const Sanitizer = class { + static sanitizeEmpty(value) { + value.trim(); + } +}; + +export default Sanitizer; diff --git a/src/index.js b/src/index.js index 93eda3237a..0a3bc50015 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,4 @@ -import App from "./App.js"; +import App from './App.js'; const app = new App(); await app.play();