예를들어 3-8-7-9
이란 숫자가 있으면 숫자를 맞출때에 3-5-6-7
이라고 작성하면 1S,1B이 된다.
3이 첫째자리 숫자끼리 같은자리와 숫자가 일치하기에 스트라이크(S)이고, 7이란 숫자가 들어있긴하지만 자리가 다르기에 1B이 된다 !!!
이제 쿵쿵따와 계산기를 겪으면서 순서도 그리는 것에 조금의 조금은 익숙해지고 있는 것 같다. 한번 내가 작성한 것과 비교해봐야 겠다.
Math.floor(Math.random() * 9 + 1)
X = {1, 2, 3, 4, 5, 6, 7, 8, 9}
// Mayh.random()은 암호학적으로 완전한 무작위가 아니다. 따라서, 보안과 관련된 작업을 할 경우에는 위험하다.
window.crypto.getRandomValue()
// 보안과 관련된 작업은 위의 함수를 사용하자
const numbers = [];
for (let n = 0; n < 9; n += 1) {
numbers.push(n + 1);
}
const answer = [];
for (let n = 0; n < 4; n += 1) { // 네 번 반복
const index = Math.floor(Math.random() * (numbers.length - n)); // 0~8 정수
answer.push(numbers[index]);
numbers.splice(index, 1);
}
배열 : 단순히 값들만 모아놓을때 사용한다.
중괄호 : 각각 값들에 속성 이름을 붙일때 사용한다.
const tries = [];
function checkInput(input) {
if (input.length !== 4) { // 길이는 4가아닌가
return alert('4자리 숫자를 입력해 주세요.');
}
if (new Set(input).size !== 4) { // 중복된 숫자가 있는가 ,new Set은 중복을 제거한 배열, length 대신 size를 사용한다.
return alert('중복되지 않게 입력해 주세요.');
}
if (tries.includes(input)) { // 이미 시도한 값은 아닌가
return alert('이미 시도한 값입니다.');
}
return true;
} // 검사하는 코드
let strike = 0;
let ball = 0;
// answer: 3146, value: 1347
for (let i = 0; i < answer.length; i++) {
const index = value.indexOf(answer[i]);
if (index > -1) { // 일치하는 숫자 발견
if (index === i) { // 자릿수도 같음
strike += 1;
} else { // 숫자만 같음
ball += 1;
}
}
}
Math.random
으로 숫자를 뽑고, 단, 뽑은 값은 정수가 아니므로정수가 필요하면 바꿔주어야 한다.Math.floor
: 내림Math.ceil
: 올림Math.round
: 반올림const number = [];
for (let n=1; n<=숫자; n+=1) {
numbers.push(n);
}
해당 인덱스
를 알려주고, 들어 있지 않다면 -1
을 반환한다. includes는 좀 더 직관적으로 true
/false
를 반환한다.'2345'.indexOF(3) === 1;
'2345'.indexOF(3) === -1;
['2', '3', '4', '5'].indexOf('5') === 3;
['2', '3', '4', '5'].indexOf(5) === -1; // 요소의 자료형까지 같아야한다.
'2345'.includes(3) === true;
['2','3','4','5'].includes(5) === false;
append
나appendChild
하기 전까지는 보이지 않는다.document.createElement
, document.createTextNode
로 만든 태그나 텍스트를 선택한 태그의 자식태그로 넣는다. 또한, append
로 텍스트를 추가할 때는 document.createTextNode
대신 문자열을 바로 넣어도 된다.