배너 이미지

[자바스크립트] 구구단 문제

최종 수정일 : (1년 전)

자바스크립트 강의 볼만한 거 없나 싶어서 여기저기 기웃거리다 구구단 문제를 구현하는 강의가 있길래 재밌겠다 싶어서 만들어봤습니다.

한 5분 만에 써내려간 코드라 좀 허술합니다…HTML로 넘기기 귀찮아서 자바스크립트의 prompt()와 alert()를 이용했습니다만, 아주 못난 디자인이라 어지간하면 html로 넘기시는 걸 추천합니다.
심지어 prompt()를 쓰다 보니 모바일에선 훨씬 문제 풀기 불리하더라고요.

도전해보기

const gugudan = () => {
    const user = {
        correct0,
        incorrect0,
        time: []
    };
    let max = 8;

    const problem = () => {
        let firstsecond;

        const setnum = () => {
            const min = 0.5 * user.correct;
            max = Math.floor(0.1 * user.correct + max);
            first = Math.floor(min + Math.random() * max+ 1;
            second = Math.floor(min + Math.random() * max+ 1;
        };

        const question = () => {
            const now = new Date();
            const prm = prompt(`${first} * ${second} = ?`"");

            if (prm === null) {
                const arr = user.time;
                const max = arr.length;
                let sum = 0;

                for(let i = 0i < maxi++) {
                    sum += arr[i/ 1000
                }

                alert(`정답 : ${user.correct}\n오답 : ${user.incorrect}\n평균 : ${(sum/max).toFixed(3)}초`)
            }
            else {
                +prm === (first * second)
                ? (
                    user.correct++,
                    user.time.push(new Date() - now),
                    setnum(),
                    question()
                )
                : (
                    alert("Incorrect!"),
                    user.incorrect++,
                    user.time.push(new Date() - now),
                    question()
                )
            }
        };

        setnum(),
        question();
    }

    problem();
};

gugudan()

제목은 구구단인데, 한 자리 곱셈만 하고 있으면 재미없으니, 문제를 맞추면 난도가 증가하도록 해뒀습니다.
여담인데, 두 자리 곱셈을 암산으로 안 한 지가 오래라, 15 * 17 같은 단순한 문제도 당황스럽더라고요.

문제를 풀지 않고 취소를 누르면 정답 수, 오답 수, 문제를 푸는데 평균적으로 걸린 시간이 출력됩니다.


profile

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

주의 : 비밀 댓글 사용 시 수정 기능을 이용할 수 있는 시간이 지나면 작성자도 내용 확인이 불가능합니다.