Run-length encoding: Difference between revisions

Content added Content deleted
(added code for sed (may need some polishing))
Line 2,505: Line 2,505:
The encode script:
The encode script:
<lang sed>
<lang sed>
/^$/ {
/^$/b
b
}
:start
:start
/^[0-9]/ {
/^[0-9]/b
b
}
s/(.)(\1*)(.*)/\21\1\3/
s/(.)(\1*)(.*)/\21\1\3/
:loop
:loop
Line 2,523: Line 2,519:
G
G
s/\n//
s/\n//
b loop
b loop }
}
/^[^0-9]+[0-9]*[0-8][^0-9]/ {
/^[^0-9]+[0-9]*[0-8][^0-9]/ {
s/^[^0-9]+[0-9]*([0-8]).*/\1/
s/^[^0-9]+[0-9]*([0-8]).*/\1/
Line 2,531: Line 2,526:
s/\n//
s/\n//
s/^([1-9]).([^0-9]*[0-9]*)[0-8]/\2\1/
s/^([1-9]).([^0-9]*[0-9]*)[0-8]/\2\1/
b loop
b loop }
}
/^[^0-9]+[0-9]+9+[^0-9]/ {
/^[^0-9]+[0-9]+9+[^0-9]/ {
s/^[^0-9]+[0-9]*([0-8]9+)[^0-9].*/\1/
s/^[^0-9]+[0-9]*([0-8]9+)[^0-9].*/\1/
Line 2,539: Line 2,533:
s/\n//
s/\n//
s/^([0-9]+).([^0-9]*[0-9]*)[0-8]9+/\2\1/
s/^([0-9]+).([^0-9]*[0-9]*)[0-8]9+/\2\1/
b loop
b loop }
}
s/^([0-9]+.)(.*)/\2\1/
s/^([0-9]+.)(.*)/\2\1/
b start
b start
Line 2,547: Line 2,540:
The decode script:
The decode script:
<lang sed>
<lang sed>
/^$/ {
/^$/b
b
}
:start
:start
/^[^0-9]/ {
/^[^0-9]/b
b
}
:loop
:loop
/^1[^0-9]/ {
/^1[^0-9]/ {
s/^1(.)(\1*)(.*)/\3\1\2/
s/^1(.)(\1*)(.*)/\3\1\2/
b start
b start }
}
/^[0-9]*[1-9][^0-9]/ {
/^[0-9]*[1-9][^0-9]/ {
h
h
Line 2,565: Line 2,553:
G
G
s/^([0-8])\n([0-9]*)[1-9]([^0-9])(.*)/\2\1\3\3\4/
s/^([0-8])\n([0-9]*)[1-9]([^0-9])(.*)/\2\1\3\3\4/
b loop
b loop }
}
/^[0-9]+0+[^0-9]/ {
/^[0-9]+0+[^0-9]/ {
h
h
Line 2,573: Line 2,560:
G
G
s/^([0-9]+)\n([0-9]*)[1-9]0+([^0-9])(.*)/\2\1\3\3\4/
s/^([0-9]+)\n([0-9]*)[1-9]0+([^0-9])(.*)/\2\1\3\3\4/
b loop
b loop }
}
</lang>
</lang>