Gehen Sie mit einem Stapel von links nach rechts, um festzustellen, auf welcher Farbe Sie sich befinden. Verwenden Sie anstelle einer diskreten Karte die 10 Zahlen in Ihrem Datensatz als Haltepunkte.
Beginnen Sie mit einem leeren Stapel und setzen Sie ihn startauf 0, bis das Ende erreicht ist:
- Wenn der Stapel leer ist:
- Suchen Sie nach der ersten Farbe, die bei oder nach beginnt
start, und legen Sie sie und alle Farben mit niedrigerem Rang auf den Stapel. Markieren Sie in Ihrer reduzierten Liste den Anfang dieser Farbe.
- sonst (falls nicht leer):
- Suchen Sie den nächsten Anfangspunkt für eine höherrangige Farbe in oder nach
startund suchen Sie das Ende der aktuellen Farbe
- Wenn die nächste Farbe zuerst beginnt, schieben Sie sie und alles andere auf dem Weg dorthin auf den Stapel. Aktualisieren Sie das Ende der aktuellen Farbe als den Anfang dieser und fügen Sie den Anfang dieser Farbe der reduzierten Liste hinzu.
- Wenn es keine gibt und die aktuelle Farbe zuerst endet, setzen Sie sie
startauf das Ende dieser Farbe, entfernen Sie sie vom Stapel und überprüfen Sie die Farbe mit dem nächsthöheren Rang
- Wenn
startsich die Farbe innerhalb des Bereichs der nächsten Farbe befindet, fügen Sie diese Farbe der reduzierten Liste hinzu, beginnend mit start.
- Wenn der Stapel leer ist, setzen Sie die Schleife einfach fort (kehren Sie zum ersten Aufzählungspunkt zurück).
In Anbetracht Ihrer Beispieldaten ist dies ein mentaler Durchlauf:
# Initial data.
flattened = []
stack = []
start = 0
# Stack is empty. Look for the next starting point at 0 or later: "b", 0 - Push it and all lower levels onto stack
flattened = [ (b, 0, ?) ]
stack = [ r, b ]
start = 0
# End of "b" is 5.4, next higher-colored start is "g" at 2 - Delimit and continue
flattened = [ (b, 0, 2), (g, 2, ?) ]
stack = [ r, b, g ]
start = 2
# End of "g" is 12, next higher-colored start is "y" at 3.5 - Delimit and continue
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, ?) ]
stack = [ r, b, g, y ]
start = 3.5
# End of "y" is 6.7, next higher-colored start is "o" at 6.7 - Delimit and continue
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, 6.7), (o, 6.7, ?) ]
stack = [ r, b, g, y, o ]
start = 6.7
# End of "o" is 10, and there is nothing starting at 12 or later in a higher color. Next off stack, "y", has already ended. Next off stack, "g", has not ended. Delimit and continue.
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, 6.7), (o, 6.7, 10), (g, 10, ?) ]
stack = [ r, b, g ]
start = 10
# End of "g" is 12, there is nothing starting at 12 or later in a higher color. Next off stack, "b", is out of range (already ended). Next off stack, "r", is out of range (not started). Mark end of current color:
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, 6.7), (o, 6.7, 10), (g, 10, 12) ]
stack = []
start = 12
# Stack is empty. Look for the next starting point at 12 or later: "r", 12.5 - Push onto stack
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, 6.7), (o, 6.7, 10), (g, 10, 12), (r, 12.5, ?) ]
stack = [ r ]
start = 12
# End of "r" is 13.8, and there is nothing starting at 12 or higher in a higher color. Mark end and pop off stack.
flattened = [ (b, 0, 2), (g, 2, 3.5), (y, 3.5, 6.7), (o, 6.7, 10), (g, 10, 12), (r, 12.5, 13.8) ]
stack = []
start = 13.8
# Stack is empty and nothing is past 13.8 - We're done.