97 lines
3.3 KiB
HTML
97 lines
3.3 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Recherche par dichotomie</title>
|
|
</head>
|
|
<body>
|
|
<h1>Jeu de recherche</h1>
|
|
<section id="setup">
|
|
|
|
<p> Je crée une liste de
|
|
<input type="number" name="quantite" value="100", id="quantite">
|
|
nombres aléatoires compris entre 1 et
|
|
<input type="number" name="max" value="100", id="max">
|
|
triés en ordre croissant.
|
|
</p>
|
|
<p>Vous devez trouver la position d'un nombre de cette liste en le moins de coup possibles.</p>
|
|
<button id="start-game" type="button" onclick="startGame()"> Lancer la partie </button>
|
|
</section>
|
|
|
|
<section id="game">
|
|
</section>
|
|
|
|
<script>
|
|
// Génère un nombre aléatoire entre 1 et 100
|
|
let randomNumber = 0;
|
|
let numbers;
|
|
let index;
|
|
let tries;
|
|
|
|
function generateNormalDistribution(mean, stdDev) {
|
|
let u = 0, v = 0;
|
|
while (u === 0) u = Math.random(); // En évitant 0
|
|
while (v === 0) v = Math.random();
|
|
const z1 = Math.sqrt(-2.0 * Math.log(u)) * Math.cos(2.0 * Math.PI * v);
|
|
return Math.floor(mean + z1 * stdDev);
|
|
}
|
|
|
|
function startGame() {
|
|
const maximum = parseInt(document.getElementById("max").value)
|
|
const length = parseInt(document.getElementById("quantite").value)
|
|
tries = 0;
|
|
|
|
const mean = Math.floor(Math.random() * maximum);
|
|
const stdDev = 10;
|
|
numbers = Array.from({length: length}, () => {
|
|
let x;
|
|
do {
|
|
x = generateNormalDistribution(mean, stdDev);
|
|
} while (x < 1 || x > maximum);
|
|
return x;
|
|
});
|
|
numbers.sort((a, b) => a - b);
|
|
|
|
index = Math.floor(Math.random() * length);
|
|
const aTrouver = numbers[index]
|
|
|
|
document.getElementById("game").innerHTML = `<h2> Trouve la position du nombre ${aTrouver} dans une liste de ${length} nombres entre 1 et ${maximum}</h2>`+
|
|
"<label for='guess'> Vous pensez qu'il est en quelle position? </label></br>" +
|
|
"<input type='text' id='guess'></br>" +
|
|
`<button id="subbutton" type='button' onclick='guessNumber()'>Je tente !</button>` +
|
|
"<div id='result'></div>"
|
|
document.getElementById("start-game").innerHTML = "Réinitialiser la partie"
|
|
}
|
|
|
|
function guessNumber() {
|
|
tries++
|
|
document.getElementById("subbutton").innerHTML = `Je tente (déja ${tries} essais)!`
|
|
// Récupère la valeur saisie par l'utilisateur
|
|
const guess = parseInt(document.getElementById("guess").value);
|
|
const length = parseInt(document.getElementById("quantite").value)
|
|
|
|
// Vérifie si la valeur est un nombre
|
|
if (isNaN(guess)) {
|
|
document.getElementById("result").innerHTML = "<p>Veuillez saisir un nombre valide.</p>";
|
|
return;
|
|
}
|
|
|
|
// Vérifie si la valeur est comprise entre 1 et 100
|
|
if (guess < 1 || guess > length) {
|
|
document.getElementById("result").innerHTML = "<p>Le nombre doit être compris entre 1 et " + length + "</p>";
|
|
return;
|
|
}
|
|
|
|
// Compare la valeur saisie avec le nombre aléatoire
|
|
if (guess < index) {
|
|
document.getElementById("result").innerHTML = "<p>Il est après!</p>";
|
|
} else if (guess > index) {
|
|
document.getElementById("result").innerHTML = "<p>Il est avant!</p>";
|
|
} else {
|
|
document.getElementById("result").innerHTML = `<p>Bravo, vous avez trouvé le nombre en ${tries}!</p>`;
|
|
}
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|