Goal : 숫자야구 프로그램 만들기
- 컴퓨터는 0과 9 사이의 서로 다른 숫자 3개를 무작위로 뽑습니다. (ex) 123, 759
- 사용자는 컴퓨터가 뽑은 숫자를 맞추기 위해 시도합니다.
- 컴퓨터는 사용자가 입력한 세자리 숫자에 대해서, 아래의 규칙대로 스트라이크(S)와 볼(B)를 알려줍니다.
- 숫자의 값과 위치가 모두 일치하면 S
- 숫자의 값은 일치하지만 위치가 틀렸으면 B
- 기회는 무제한이며, 몇번의 시도 후에 맞췄는지 기록됩니다.
- 숫자 3개를 모두 맞춘 경우, 게임을 종료합니다.
진행 방식
컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!
1번째 시도 : 134
0B0S
2번째 시도 : 238
1B1S
3번째 시도 : 820
2B1S
4번째 시도 : 028
3B
5번째 시도 : 280
3S
4번만에 맞히셨습니다.
게임을 종료합니다.
전체 코드
const readline = require("readline"); //내장 모듈인 readline 모듈
const computerNumbers = generateComputerNumbers();
let tries = 0;
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.setPrompt("숫자 3개를 입력하세요 (중복 없이) ");
rl.prompt();
rl.on("line", (userNumbers) => {
const result = checkNumbers(computerNumbers, userNumbers);
tries++;
console.log(`${tries}번째 시도 : ${userNumbers}`);
console.log(result);
if (result === "3S") {
console.log(`축하합니다! ${tries}번만에 맞추셨습니다.`);
rl.close();
} else if (result === "0B3S") {
console.log("3 스트라이크! 게임을 종료합니다.");
rl.close();
} else {
rl.prompt();
}
});
//무작위로 서로 다른 숫자 3개를 뽑는 함수
function generateComputerNumbers() {
const numbers = [];
while (numbers.length < 3) {
const randomNumber = Math.floor(Math.random() * 10); //0~9까지 숫자 10개
if (!numbers.includes(randomNumber)) {
numbers.push(randomNumber);
}
}
return numbers;
}
//사용자가 입력한 숫자와 무작위로 뽑은 숫자를 비교하여 스트라이크와 볼의 개수를 반환하는 함수
function checkNumbers(computerNumbers, userNumbers) {
const sNumbers = [];
const bNumbers = [];
for (let i = 0; i < 3; i++) {
const userNumber = Number(userNumbers[i]);
if (computerNumbers[i] === userNumber) {
sNumbers.push(userNumber);
} else if (computerNumbers.includes(userNumber)) {
bNumbers.push(userNumber);
}
}
const s = sNumbers.length;
const b = bNumbers.length;
if (s === 0 && b === 0) {
return "0B0S";
}
if (s === 3 && b === 0) {
return "3S";
}
return `${b}B${s}S`;
}
readline이란?
- Readable Stream에서 한 번에 한 줄 씩 데이터를 읽기 위한 인터페이스를 제공하는 모듈
- 입출력을 한 줄씩 처리하는 모듈
- readline 사용법
1. readline 모듈 불러오기
const readline = require("redaline");
2. 인터페이스 생성하기
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
3. 입출력을 처리하는 코드 작성하기
rl.on("line", (line) => {
/*입력받는 값을 처리하는 코드*/
rl.close();
});
rl.on("close", () => {
/*입력이 끝나고 실행할 코드*/
process.exit();
});
작성 중
'TIL' 카테고리의 다른 글
javascript 소수점 오류 (0) | 2023.04.14 |
---|---|
2023.04.05_코딩테스트 연습 (0) | 2023.04.05 |
2023.04.04_js_일급 객체로서의 함수 (0) | 2023.04.05 |
2023.03.23_웹 퍼블리싱 (0) | 2023.03.23 |
2023.03.22_position absolute (0) | 2023.03.21 |