code: public SolutionCategory getCategory(List<List<ColumnName>> names) {
      Piece xPiece = null;
      // find the "x" piece
      for(Piece p: pieces) {
        if ("x".equals(p.name)) {
          xPiece = p;
          break;
        }
      }
      // find the row containing the "x"
      for(List<ColumnName> row: names) {
        if (row.contains(xPiece)) {
          // figure out where the "x" is located
          int low_x = width;
          int high_x = 0;
          int low_y = height;
          int high_y = 0;
          for(ColumnName col: row) {
            if (col instanceof Point) {
              int x = ((Point) col).x;
              int y = ((Point) col).y;
              if (x < low_x) {
                low_x = x;
              }
              if (x > high_x) {
                high_x = x;
              }
              if (y < low_y) {
                low_y = y;
              }
              if (y > high_y) {
                high_y = y;
              }
            }
          }
          boolean mid_x = (low_x + high_x == width - 1);
          boolean mid_y = (low_y + high_y == height - 1);
          if (mid_x && mid_y) {
            return SolutionCategory.CENTER;
          } else if (mid_x) {
            return SolutionCategory.MID_X;
          } else if (mid_y) {
            return SolutionCategory.MID_Y;
          }
          break;
        }
      }
      return SolutionCategory.UPPER_LEFT;
    }
docs: Find whether the solution has the x in the upper left quadrant, the
  x-midline, the y-midline or in the center.
  @param names the solution to check
  @return the catagory of the solution