I thought that Oracle has made the change in 8i so that if you do not touch the real column, i.e., if you go for just pseudo-columns, then block is not read.

Now, if you claim "Block must be read in all cases" is true (and please provide a reliable URL for that), then COUNT(ROWID) is same as COUNT(*). For all I heard, Oracle managed somehow to avoid that "Block must be read in all cases" in 8i.

Did you make the PUZZLE :-)
or you found it somewhere?