2022-2023/1NSI/09_Recherche_par_dichotomie.../cherche_dich/dichotomie.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>