Erst 1-24 und danach 16??
Ist wohl ein Tippfehler.
IMHO läuft man das Array einfach von vorn bis hinten durch und hat zwei Zähler für den Beginn und das Ende eines TRUE-Bereiches. Bei aufeinanderfolgenden TRUEs wird das Ende hochgezählt. Bei einem FALSE erfolgt die Ausgabe plus Semicolon und das erneute Setzen der Beginn/Ende-Grenzen. Bei aufeinanderfolgenden FALSEs wird die Ausgabe übersprungen. Wenn Beginn=Ende, dann nur die Zahl ausgeben, sonst Beginn plus '-' plus Ende.