> This problem is paper-only - see explanation for the canonical React reasoning.
A virtualized list renders only the rows currently in viewport (plus a small overscan). The auto-grader validates the visible-range math.
Given:
- `scrollTop` (px from list top)
- `viewportHeight` (px)
- `rowHeight` (px, fixed-height assumption)
- `totalRows`
- `overscan` (extra rows to render above/below)
Return `{ start, end }` where rows in `[start, end)` should be rendered. Clamp to `[0, totalRows]`. Apply overscan symmetrically.
**For the auto-grader:** implement `visibleRange({ scrollTop, viewportHeight, rowHeight, totalRows, overscan })`.