cmp ← {cmp←1} ##.packR exp              ⍝ Run-Length Encoding (RLE packing).

Run-length encoding is suitable for heavily repeated data, otherwise it's pretty
inefficient. Repeated items are represented by the item and its repeat count.

Technical note:

Repeated  item  runs are detected in the coding by pairwise reduction using not-
equal (≠):

    runs←1,2≠/vect              ⍝ mask of start of runs.

Changing the not-equal to a not-match (≢) would reduce performance a little, but
allow packR to accommodate nested arguments.

Examples:

    packR'Mississippi'
┌──┬───────────────┬────────┐
│11│1 1 2 1 2 1 2 1│Misisipi│
└──┴───────────────┴────────┘

    packR 11 11 11 22 22 11 11
┌─┬─────┬────────┐
│7│3 2 2│11 22 11│
└─┴─────┴────────┘

    ⎕←mat←{⍵×[⎕io]⍵∘.≥⍵}⍳9      ⍝ lower-diagonal matrix.
1 0 0 0 0 0 0 0 0
2 2 0 0 0 0 0 0 0
3 3 3 0 0 0 0 0 0
4 4 4 4 0 0 0 0 0
5 5 5 5 5 0 0 0 0
6 6 6 6 6 6 0 0 0
7 7 7 7 7 7 7 0 0
8 8 8 8 8 8 8 8 0
9 9 9 9 9 9 9 9 9

    packR mat
┌───┬─────────────────────────────────┬─────────────────────────────────┐
│9 9│1 8 2 7 3 6 4 5 5 4 6 3 7 2 8 1 9│1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9│
└───┴─────────────────────────────────┴─────────────────────────────────┘

See also: Data_compression

Back to: contents

Back to: Workspaces