NAME: JYOTI GUPTA
SE-CS 33
code for number guessing game
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Number Guessing Game</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 600px;
margin: 0 auto;
padding: 20px;
text-align: center;
}
input, button {
font-size: 16px;
margin: 10px;
padding: 5px 10px;
}
#message, #efficiency {
margin-top: 20px;
font-weight: bold;
}
</style>
</head>
<body>
<h1>Number Guessing Game</h1>
<p>Welcome to the Binary Search Number Guessing Game!</p>
<div id="setup">
<input type="number" id="lower" placeholder="Lower Bound (A)">
<input type="number" id="upper" placeholder="Upper Bound (B)">
<button onclick="setupGame()">Start Game</button>
</div>
<div id="game" style="display: none;">
<p id="range"></p>
<p id="optimalGuess"></p>
<input type="number" id="guess" placeholder="Enter your guess">
<button onclick="makeGuess()">Submit Guess</button>
</div>
<p id="message"></p>
<p id="efficiency"></p>
<p id="stats"></p>
<script>
let secretNumber, lower, upper, guesses, optimalGuesses;
function calculateOptimalGuesses(rangeSize) {
return Math.ceil(Math.log2(rangeSize));
}
function setupGame() {
lower = parseInt(document.getElementById('lower').value);
upper = parseInt(document.getElementById('upper').value);
if (isNaN(lower) || isNaN(upper) || lower >= upper) {
alert("Please enter valid lower and upper bounds.");
return;
}
secretNumber = Math.floor(Math.random() * (upper - lower + 1)) +
lower;
guesses = 0;
optimalGuesses = calculateOptimalGuesses(upper - lower + 1);
document.getElementById('setup').style.display = 'none';
document.getElementById('game').style.display = 'block';
updateRange();
document.getElementById('message').textContent = `I'm thinking of
a number between ${lower} and ${upper}. You should be able to guess it in
${optimalGuesses} guesses or fewer.`;
}
function updateRange() {
document.getElementById('range').textContent = `Current range:
[${lower}, ${upper}]`;
let optimalGuess = Math.floor((lower + upper) / 2);
document.getElementById('optimalGuess').textContent = `Optimal
guess: ${optimalGuess}`;
}
function makeGuess() {
let guess = parseInt(document.getElementById('guess').value);
if (isNaN(guess) || guess < lower || guess > upper) {
alert("Please enter a valid guess within the current range.");
return;
}
guesses++;
let optimalGuess = Math.floor((lower + upper) / 2);
let efficiency = (1 - Math.abs(optimalGuess - guess) / (upper -
lower + 1)) * 100;
if (guess < secretNumber) {
document.getElementById('message').textContent = "Too low! The
number is higher.";
lower = guess + 1;
} else if (guess > secretNumber) {
document.getElementById('message').textContent = "Too high!
The number is lower.";
upper = guess - 1;
} else {
document.getElementById('message').textContent =
`Congratulations! You've guessed the number ${secretNumber} correctly in
${guesses} guesses!`;
document.getElementById('game').style.display = 'none';
document.getElementById('setup').style.display = 'block';
if (guesses <= optimalGuesses) {
document.getElementById('stats').textContent = "Great job!
You guessed optimally or better than expected!";
} else {
document.getElementById('stats').textContent = `You could
improve. The optimal strategy would take ${optimalGuesses} guesses or fewer.`;
}
return;
}
updateRange();
document.getElementById('efficiency').textContent = `Guess
efficiency: ${efficiency.toFixed(2)}%`;
}
</script>
</body>
</html>