code: private boolean[] generateRow(boolean[] rowValues, int x, int y, int num) {
      // clear the scratch array
      for(int i=0; i < rowValues.length; ++i) {
        rowValues[i] = false;
      }
      // find the square coordinates
      int xBox = (int) x / squareXSize;
      int yBox = (int) y / squareYSize;
      // mark the column
      rowValues[x*size + num - 1] = true;
      // mark the row
      rowValues[size*size + y*size + num - 1] = true;
      // mark the square
      rowValues[2*size*size + (xBox*squareXSize + yBox)*size + num - 1] = true;
      // mark the cell
      rowValues[3*size*size + size*x + y] = true;
      return rowValues;
    }
docs: Create a row that places num in cell x, y.
  @param rowValues a scratch pad to mark the bits needed
  @param x the horizontal offset of the cell
  @param y the vertical offset of the cell
  @param num the number to place
  @return a bitvector of the columns selected