Upon decoding ["D", "L", "c"], again, "D" = "L"R. When the first "L"R characters are read to the output, this corresponds to a single run unit appended to the output buffer. At this point, the read pointer could be thought of as only needing to return int("L"/"L"R) + (1 if "L" mod "L"R ≠ 0) times to the start of that single buffered run unit, read "L"R characters (or maybe fewer on the last return), and repeat until a total of "L" characters are read. But mirroring the encoding process, since the pattern is repetitive, the read pointer need only trail in sync with the write pointer by a fixed distance equal to the run length "L"R until "L" characters have been copied to output in total.