Welcome to the guessing game.

Please think of a number between
(lower bound) and
(upper bound)

<%! int numGuesses(int n) { double log2n = Math.log10(n) / Math.log10(2); double ceil = Math.ceil(log2n); return ((int)ceil); } %> <% String answer = request.getParameter("answer"); String lower = request.getParameter("lower"); String upper = request.getParameter("upper"); int iLower = 0; int iUpper = 0; try { iLower = Integer.parseInt(lower); iUpper = Integer.parseInt(upper); } catch (NumberFormatException e) { %> <% } catch (Exception e) { throw e; } if (iUpper < iLower){ %> <% } int q = Integer.parseInt(request.getParameter("questionsSoFar")); String rg = request.getParameter("requiredGuesses"); int requiredGuesses = 0; if (rg == null) requiredGuesses = numGuesses(iUpper - iLower + 1); else requiredGuesses = Integer.parseInt(rg); int pivot = (iUpper + iLower) / 2; if (answer != null) { if (answer.equals("yes")) iUpper = pivot; else iLower = pivot+1; } pivot = (iUpper + iLower) / 2; boolean doneGuessing = false; if (iLower == iUpper) doneGuessing = true; %> <% if (doneGuessing) { %>

You are thinking of <%= iUpper %>!

It required <%= q %> questions to guess that.

I predicted <%= requiredGuesses %> questions. So there.

Play again?

<% } else { %>

You are thinking of a number.
It will take me <%= requiredGuesses %> guesses to guess it!

The computer has asked <%= q+1 %> questions so far.

Is your number less than or equal to <%= pivot %>?

> > > >
<% } %>