-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
133 lines (107 loc) · 4.6 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// Axel Cotón Gutiérrez Copyright 2023
// Variables globales para las unidades y el número máximo de ceros
let units = ["unidades", "decenas", "centenas", "unidades de millar"]; // Valor por defecto
let maxZeros = 3;
let currentQuestion = null;
// Función para generar una pregunta aleatoria
function generateRandomQuestion() {
// Calcula el número máximo basado en el exponente (maxZeros)
const maxNumber = Math.pow(10, maxZeros + 1) - 1;
// Genera un número aleatorio entre 1 y el número máximo
const number = Math.floor(Math.random() * maxNumber) + 1;
// Convierte el número en una cadena para trabajar con las cifras
const numberStr = number.toString();
// Elige aleatoriamente una posición de cifra en el número
const digitPosition = Math.floor(Math.random() * units.length);
// Verifica si la posición de la cifra es válida para el número generado
if (digitPosition >= numberStr.length) {
return generateRandomQuestion(); // Vuelve a generar la pregunta si es inválida
}
// Obtiene el exponente (posición de cifra) en la posición seleccionada
const exponent = maxZeros - digitPosition;
// Obtiene la cifra en la posición seleccionada
const digit = parseInt(numberStr.charAt(numberStr.length - digitPosition - 1));
// Construye la pregunta basada en la posición de la cifra
const unit = units[digitPosition];
const question = `Observa el número ${formatNumberWithSpaces(number)}. ¿Cuál es la cifra de las ${unit}?`;
return { question, answer: digit };
}
// Función para dar formato al número con espacios de mil
function formatNumberWithSpaces(number) {
// Convierte el número a una cadena
const numberStr = number.toString();
// Si el número tiene cuatro cifras, no separamos con espacios
if (numberStr.length === 4) {
return numberStr;
}
// Divide la cadena en grupos de tres cifras desde el final
const groups = [];
let i = numberStr.length;
while (i > 0) {
groups.push(numberStr.slice(Math.max(0, i - 3), i));
i -= 3;
}
// Une los grupos con espacios y devuelve el resultado
return groups.reverse().join(' ');
}
// Función para mostrar una nueva pregunta
function displayQuestion() {
currentQuestion = generateRandomQuestion();
questionText.textContent = currentQuestion.question;
userAnswer.value = "";
result.textContent = "";
checkAnswerButton.disabled = false;
nextQuestionButton.style.display = "none";
}
// Función para comprobar la respuesta del usuario
function checkAnswer() {
const userResponse = parseInt(userAnswer.value.trim());
const correctAnswer = currentQuestion.answer;
if (userResponse === correctAnswer) {
result.textContent = "¡Respuesta Correcta!";
result.style.color = "green";
} else {
result.textContent = "Respuesta Incorrecta. La respuesta correcta es " + correctAnswer + ".";
result.style.color = "red";
}
checkAnswerButton.disabled = true;
nextQuestionButton.style.display = "block";
}
// Función para mostrar la siguiente pregunta
function nextQuestion() {
displayQuestion();
}
// Escucha el evento de cambio en los radios de selección de ceros
const radioButtons = document.getElementsByName("maxZeros");
for (const radioButton of radioButtons) {
radioButton.addEventListener("change", function () {
maxZeros = parseInt(this.value);
updateUnits();
displayQuestion();
checkAnswerButton.disabled = false; // Habilitar el botón "Comprobar" después de cambiar las unidades
});
}
// Función para actualizar la matriz de unidades en función de maxZeros
function updateUnits() {
units = ["unidades", "decenas", "centenas", "unidades de millar"];
if (maxZeros >= 6) {
units.push("decenas de millar", "centenas de millar", "unidades de millón");
}
if (maxZeros >= 9) {
units.push("decenas de millón", "centenas de millón", "unidades de millardo");
}
if (maxZeros >= 12) {
units.push("decenas de millardo", "centenas de millardo", "unidades de billón");
}
}
// Elementos HTML
const questionText = document.getElementById("question-text");
const userAnswer = document.getElementById("user-answer");
const checkAnswerButton = document.getElementById("check-answer");
const result = document.getElementById("result");
const nextQuestionButton = document.getElementById("next-question");
// Mostrar la primera pregunta
displayQuestion();
// Eventos de los botones
checkAnswerButton.addEventListener("click", checkAnswer);
nextQuestionButton.addEventListener("click", nextQuestion);