September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -1,2 +1,4 @@
|
|||
---
|
||||
category:
|
||||
- Encodings
|
||||
note: Compression
|
||||
|
|
|
|||
23
Task/Run-length-encoding/Gambas/run-length-encoding.gambas
Normal file
23
Task/Run-length-encoding/Gambas/run-length-encoding.gambas
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
Public Sub Main()
|
||||
Dim sString As String = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"
|
||||
Dim siCount As Short = 1
|
||||
Dim siStart As Short = 1
|
||||
Dim sHold As New String[]
|
||||
Dim sTemp As String
|
||||
|
||||
sString &= " "
|
||||
|
||||
Repeat
|
||||
sTemp = Mid(sString, siCount, 1)
|
||||
Do
|
||||
Inc siCount
|
||||
If Mid(sString, siCount, 1) <> sTemp Then Break
|
||||
If siCount = Len(sString) Then Break
|
||||
Loop
|
||||
sHold.add(Str(siCount - siStart) & sTemp)
|
||||
siStart = siCount
|
||||
Until siCount = Len(sString)
|
||||
|
||||
Print sString & gb.NewLine & sHold.Join(", ")
|
||||
|
||||
End
|
||||
14
Task/Run-length-encoding/Kotlin/run-length-encoding.kotlin
Normal file
14
Task/Run-length-encoding/Kotlin/run-length-encoding.kotlin
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
tailrec fun runLengthEncoding(text:String,prev:String=""):String {
|
||||
if (text.isEmpty()){
|
||||
return prev
|
||||
}
|
||||
val initialChar = text.get(0)
|
||||
val count = text.takeWhile{ it==initialChar }.count()
|
||||
return runLengthEncoding(text.substring(count),prev + "$count$initialChar" )
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
assert(runLengthEncoding("TTESSST") == "2T1E3S1T")
|
||||
assert(runLengthEncoding("WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW")
|
||||
== "12W1B12W3B24W1B14W")
|
||||
}
|
||||
26
Task/Run-length-encoding/Sed/run-length-encoding-1.sed
Normal file
26
Task/Run-length-encoding/Sed/run-length-encoding-1.sed
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
/^$/ b
|
||||
:start
|
||||
/^[0-9]/ b
|
||||
s/^/1/
|
||||
:loop
|
||||
h
|
||||
/^9+([^0-9])\1+/ {
|
||||
s/^(9+).*/0\1/
|
||||
y/09/10/
|
||||
G
|
||||
s/^(.+)\n[0-9]+.(.*)/\1\2/
|
||||
b loop }
|
||||
/^[0-9]*[0-8]([^0-9])\1+/ {
|
||||
s/^[0-9]*([0-8]).*/\1/
|
||||
y/012345678/123456789/
|
||||
G
|
||||
s/^(.)\n([0-9]*)[0-8].(.*)/\2\1\3/
|
||||
b loop }
|
||||
/^[0-9]+9+([^0-9])\1+/ {
|
||||
s/^[0-9]*([0-8]9+).*/\1/
|
||||
y/0123456789/1234567890/
|
||||
G
|
||||
s/^(.+)\n([0-9]*)[0-8]9+.(.*)/\2\1\3/
|
||||
b loop }
|
||||
s/^([0-9]+.)(.*)/\2\1/
|
||||
b start
|
||||
21
Task/Run-length-encoding/Sed/run-length-encoding-2.sed
Normal file
21
Task/Run-length-encoding/Sed/run-length-encoding-2.sed
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
/^$/ b
|
||||
:start
|
||||
/^[^0-9]/ b
|
||||
:loop
|
||||
/^1[^0-9]/ {
|
||||
s/^1(.)(\1*)(.*)/\3\1\2/
|
||||
b start }
|
||||
h
|
||||
/^[0-9]*[1-9][^0-9]/ {
|
||||
s/^[0-9]*([1-9]).*/\1/
|
||||
y/123456789/012345678/
|
||||
G
|
||||
s/^([0-8])\n([0-9]*)[1-9]([^0-9])(.*)/\2\1\3\3\4/
|
||||
b loop }
|
||||
/^[0-9]+0[^0-9]/ {
|
||||
s/^[0-9]*([1-9]0+)[^0-9].*/\1/
|
||||
y/0123456789/9012345678/
|
||||
G
|
||||
s/^([0-9]+)\n([0-9]*)[1-9]0+([^0-9])(.*)/\2\1\3\3\4/
|
||||
s/^0+//
|
||||
b loop }
|
||||
8
Task/Run-length-encoding/Sed/run-length-encoding-3.sed
Normal file
8
Task/Run-length-encoding/Sed/run-length-encoding-3.sed
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
sed -rf encode.sed <<< "foo oops"
|
||||
# 1f2o1 2o1p1s
|
||||
|
||||
sed -rf decode.sed <<< "1f2o1 2o1p1s"
|
||||
# foo oops
|
||||
|
||||
(sed -rf decode.sed | sed -rf encode.sed) <<< 1000.
|
||||
# 1000.
|
||||
18
Task/Run-length-encoding/Zkl/run-length-encoding-1.zkl
Normal file
18
Task/Run-length-encoding/Zkl/run-length-encoding-1.zkl
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
const MAX_LEN=250, MIN_LEN=3;
|
||||
fcn compress(text){ // !empty byte/text stream -->Data (byte stream)
|
||||
sink:=Data(); cnt:=Ref(0);
|
||||
write:='wrap(c,n){ // helper function
|
||||
while(n>MAX_LEN){
|
||||
sink.write(1); sink.write(MAX_LEN); sink.write(c);
|
||||
n-=MAX_LEN;
|
||||
}
|
||||
if(n>MIN_LEN){ sink.write(1); sink.write(n); sink.write(c); }
|
||||
else { do(n) { sink.write(c); } }
|
||||
};
|
||||
text.reduce('wrap(a,b){
|
||||
if(a==b) cnt.inc();
|
||||
else{ write(a,cnt.value); cnt.set(1); }
|
||||
b
|
||||
},text[0]) : write(_,cnt.value);
|
||||
sink;
|
||||
}
|
||||
6
Task/Run-length-encoding/Zkl/run-length-encoding-2.zkl
Normal file
6
Task/Run-length-encoding/Zkl/run-length-encoding-2.zkl
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
fcn inflate(data){ //-->String
|
||||
data.howza(3).pump(String,
|
||||
fcn(c){ // if c==1, read n,c2 and expand, else write c
|
||||
if(c=="\x01") return(Void.Read,2) else return(Void.Write,c) },
|
||||
fcn(_,n,c){ c*n.toAsc() })
|
||||
}
|
||||
5
Task/Run-length-encoding/Zkl/run-length-encoding-3.zkl
Normal file
5
Task/Run-length-encoding/Zkl/run-length-encoding-3.zkl
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
text:="WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW";
|
||||
d:=compress(text);
|
||||
d.bytes().println();
|
||||
println(text.len()," bytes --> ",d.len()," bytes");
|
||||
println(text==inflate(d));
|
||||
Loading…
Add table
Add a link
Reference in a new issue