code: def boggle_hill_climbing(board=None, ntimes=100, verbose=True):
      
      finder = BoggleFinder()
      if board is None:
          board = random_boggle()
      best = len(finder.set_board(board))
      for _ in range(ntimes):
          i, oldc = mutate_boggle(board)
          new = len(finder.set_board(board))
          if new > best:
              best = new
              if verbose: print best, _, board
          else:
              board[i] = oldc ## Change back
      if verbose:
          print_boggle(board)
      return board, best
docs: Solve inverse Boggle by hill-climbing: find a high-scoring board by
      starting with a random one and changing it.