Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,65 @@
# javascript-planetlotto-precourse

# 최종테스트 (행성 로또)

- [ ] README.md에 국현할 기능 목록과 도전 목표 작성하기
- [ ]기능 요구사항

- 기능 요구사항에 기재되지 않은 내용은 스스로 판단하여 구현한다.
- [ ] 프로그래밍 요구사항
- [ ] 도전과제

과제 제출 전 체크리스트

- [ ] 요구된 사항에 명시된 출력 형식을 따랐나
- [ ] 기능 구현을 완료한 후 아래 가이드에 따라 모든 테스트가 성공적으로 실행되 는지 확인한다.
- [ ] 테스트 성공했는지 확인
-

# 행성로또

## 과제 진행 요구사항

- [ ] git 커밋 단위는 README.md 에 정리한 기능 목록 단위로 추가한다.
- feat (feature)
- fix (bug fix)
- docs (documentation)
- style (formatting, missing semi colons, …)
- refactor
- test (when adding missing tests)
- chore (maintain)

## 기능 요구사항

### 입력/출력 역할은 제공된 InputView, OutputView에서 수행하며 기존 메서드를 수정, 삭제할 수 없다.

[] 에러문구는 "[ERROR]"로 시작
[] 로또 구입금액 입력받기
[] 구입금액에 따른 구매 장수 출력
[] 로또 구매 장수에 따른 구매한 로또의 장수만큼 번호 출력
[] 당첨번호 입력받기
[] 보너스 번호 입력받기
[] 당첨 통계 내기
[] 당첨된 로또 갯수에 따른 당첨된 금액과 그에 따른 갯수 출력하기

# 프로그래밍 요구사항

[] Node.js 22.19.0 버전에서 실행 가능해야 한다.
[] 프로그램 실행의 시작점은 App.js의 run()이다.
[] package.json 파일은 변경할 수 없으며, 제공된 라이브러리와 스타일 라이브러리 이외의 외부 라이브러리는 사용하지 않는다.
[] 프로그램 종료 시 process.exit()를 호출하지 않는다.
[] 프로그래밍 요구 사항에서 달리 명시하지 않는 한 파일, 패키지 등의 이름을 바꾸거나 이동하지 않는다.
[] 자바스크립트 코드 컨벤션을 지키면서 프로그래밍한다.
[] 기본적으로 JavaScript Style Guide를 원칙으로 한다.
[] 기본으로 제공되는 테스트가 통과해야 한다.

# 도전과제

[] 리팩토링
[] 기능확장 - 1~3주차 오픈미션 돌아보기

- 아쉬웠던 점은 무엇인가요?
- 다음에는 다르게 해보고 싶었던 것은 무엇인가요?
- 피드백을 받았지만 적용하지 못한 것은 무엇인가요?

// 예외테스트는 신경안써도됨
98 changes: 97 additions & 1 deletion src/App.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,101 @@
import { Console, Random } from "@woowacourse/mission-utils";
import { InputView, OutputView } from "./view.js";
import { MissionUtils } from "@woowacourse/mission-utils";
import Lotto from "./lotto.js";
class App {
async run() {}
async run() {
// 로또 구입금액 입력받기
const input = await InputView.askAmount();
const ticketCount = input / 500;

// 로또 구매 장수에 따른 구매한 로또의 장수만큼 번호 출력
let myLottoTicketList = [];
for (let i = 0; i < ticketCount; i++) {
let numbers = Lotto.getLottoNumber();
myLottoTicketList.push(numbers);
}
// OutputView.printBlank();
// 구입금액에 따른 구매 장수 출력

const outPut = OutputView.printPurchasedLottos(myLottoTicketList);

// 지난주 당첨번호 입력받기
const lastWinNumber = await InputView.askWinningLotto();

//당첨번호 출력하기
// Console.print(lastWinNumber);
// console.log("지난주 당첨번호 -> ", lastWinNumber);

// 보너스 번호 입력받기
const lastBonusNumber = await InputView.askBonusNumber();

// const 당첨된거확인하기위한함수 = getLastWinNumber(
// lastWinNumber,
// lastBonusNumber
// );

// console.log("myLottoTicketList-> ", myLottoTicketList);
// 당첨된 로또 갯수에 따른 당첨된 금액과 그에 따른 갯수 출력하기

let results = {
5: 0,
"4+b": 0,
4: 0,
"3+b": 0,
"2+b": 0,
0: 0,
};

// let results = {
// 1: 0,
// 2: 0,
// 3: 0,
// 4: 0,
// 5: 0,
// 0: 0,
// };

for (let i = 0; i < myLottoTicketList.length; i++) {
const myLotto = myLottoTicketList[i];
// console.log(lotto);
// console.log(typeof lotto);
const correctType = Lotto.getCorrectType(
lastWinNumber,
lastBonusNumber,
myLotto
);
console.log("myLotto->", myLotto[0]);
if (!correctType) {
continue;
}
results[correctType]++;
}

// console.log(results);

const r0 = results["5"];
const r1 = results["4+b"];

const r2 = results["4"];
const r3 = results["3+b"];

const r4 = results["2+b"];
const r5 = results["0"];

// console.log("-------------->>>>>>>>", results);
// console.log("여기보세요 ", r0, r1, r2, r3, r4, r5);

const Map = { 1: r0, 2: r1, 3: r2, 4: r3, 5: r4, 0: r5 };
// 당첨 번호를 입력해 주세요.
// 1, 2, 3, 4, 5

// 보너스 번호 번호를 입력해 주세요.
// 6
// countsByRank = results;
// countsByRank = {};
OutputView.printResult(results);
// console.log("costOutput ---> ", costOutput);
}
}

export default App;
74 changes: 74 additions & 0 deletions src/lotto.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import { Console, Random } from "@woowacourse/mission-utils";

class Lotto {
static getLottoNumber() {
return Random.pickUniqueNumbersInRange(1, 30, 5).sort((a, b) => a - b);
}
// 보너스 숫자 검사
// static checkBonusNumber() {}

// static getLastWinNumber(lastWinNumber, lastBonusNumber, myLottoTicketList) {
// const lastWinNumber = lastWinNumber;
// const lastBonusNumber = lastBonusNumber;
// return lastWinNumber, lastBonusNumber;
// }
static getCorrectType(lastWinNumber, lastBonusNumber, myLotto) {
let correctCount = 0;
console.log("이거 myLotto-> ", myLotto);
console.log("이거 lastWinNumber ", lastWinNumber);
console.log("이거 lastBonusNumber ", lastBonusNumber);

for (let i = 0; i < myLotto.length; i++) {
// if (lastWinNumber.filter((value) => myLotto.includes(value))) {
// correctCount++;

// }
let correctNumberList = lastWinNumber.filter((value) =>
myLotto.includes(value)
);
correctCount = correctNumberList.length;
console.log("correct--->", correctCount);
}
// if (correctCount === 5) {
// return 5;
// }
// if (correctCount === 4 && myLotto.includes(lastBonusNumber)) {
// return ;
// }
// if (correctCount === 4) {
// return 3;
// }
// if (correctCount === 3 && myLotto.includes(lastBonusNumber)) {
// return 4;
// }
// if (correctCount === 2 && myLotto.includes(lastBonusNumber)) {
// return 5;
// }

// if ((correctCount = 0)) {
// return 0;
// }

if (correctCount === 5) {
return 5;
}
if (correctCount === 4 && myLotto.includes(lastBonusNumber)) {
return "4+b";
}
if (correctCount === 4) {
return 4;
}
if (correctCount === 3 && myLotto.includes(lastBonusNumber)) {
return "3+b";
}
if (correctCount === 2 && myLotto.includes(lastBonusNumber)) {
return "2+b";
}

if ((correctCount = 0)) {
return 0;
}
return correctCount; // 몇개 당첨됐는지?
}
}
export default Lotto;
71 changes: 71 additions & 0 deletions src/sadas
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
; import { Console, Random } from "@woowacourse/mission-utils";

; class Lotto {
; #numbers;

; constructor(numbers) {
; this.#validate(numbers);
; this.#numbers = numbers;
; }

; #validate(numbers) {
; if (numbers.length !== 6) {
; throw new Error("[ERROR] 로또 번호는 6개여야 합니다.");
; }

; const correctSet = new Set(numbers);
; // console.log(correctSet);
; if (correctSet.size !== 6) {
; throw new Error("[ERROR] 중복되는 값이 있습니다.");
; }
; }

; getNumbers() {
; return this.#numbers;
; }

; getCorrectType(correctNumbers, bonusNumber) {
; let correctCount = 0;
; for (let i = 0; i < this.#numbers.length; i++) {
; if (correctNumbers.includes(this.#numbers[i])) {
; correctCount++;
; }
; }

; if (correctCount < 3) {
; return false;
; }

; if (correctCount === 5 && this.#numbers.includes(bonusNumber)) {
; return "5+b";
; }
; return correctCount; // 몇개 당첨됐는지?
; }

; static() {
; return Random.pickUniqueNumbersInRange(1, 45, 6).sort((a, b) => a - b);
; }

; // 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%입니다.

; validateNumbers() {
; //TODO 입력 된 값들이 문자인지 검증
; const arr = this.#numbers;
; for (let n of arr) {
; if (Number.isNaN(Number(n))) {
; throw new Error(
; "[ERROR] 로또 번호는 숫자로 이루어져야 합니다. 아직 문자입니다."
; );
; continue;
; }
; }
; }
; // TODO: 추가 기능 구현
; }

; export default Lotto;
Loading