questions.py


Below is the syntax highlighted version of questions.py from §4.2 Sorting and Searching.


#-----------------------------------------------------------------------
# questions.py
#-----------------------------------------------------------------------

import sys
import stdio

#-----------------------------------------------------------------------

# Return the hidden integer in the range [lo, hi) by writing
# "Greater than or equal to" questions to standard output and
# reading True/False replies from standard input.

def search(lo, hi):
    if (hi - lo) == 1:
        return lo
    mid = (hi + lo) // 2
    stdio.write('Greater than or equal to ' + str(mid) + '?  ')
    if stdio.readBool():
        return search(mid, hi)
    else:
        return search(lo, mid)

#-----------------------------------------------------------------------

# Accept integer command-line argument k. Ask the user to think of
# an integer between 0 and (2**k)-1. Write "Greater than or equal to?"
# questions to standard output, in binary search fashion. Read
# True/False replies from standard input. Write the integer to
# standard output.

k = int(sys.argv[1])
n = 2 ** k
stdio.write('Think of a number ')
stdio.writeln('between 0 and ' + str(n-1))
guess = search(0, n)
stdio.writeln('Your number is ' + str(guess))

#-----------------------------------------------------------------------

# python questions.py 7
# Think of a number between 0 and 127
# Greater than or equal to 64?  True
# Greater than or equal to 96?  False
# Greater than or equal to 80?  False
# Greater than or equal to 72?  True
# Greater than or equal to 76?  True
# Greater than or equal to 78?  False
# Greater than or equal to 77?  True
# Your number is 77


Copyright © 2000–2015, Robert Sedgewick, Kevin Wayne, and Robert Dondero.
Last updated: Fri Oct 20 20:45:16 EDT 2017.