The usual convention is specifying ranges as `startIndex` (inclusively) to `endIndex` (exclusively).
Does breaking with this convention (by making the end index also inclusively) buy us anything here?
At first glance it appears to only add complexity by requiring the odd `+ 1` and `- 1` here and there.