Run-length encoding: Difference between revisions

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