Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
100
Task/Run-length-encoding/Action-/run-length-encoding.action
Normal file
100
Task/Run-length-encoding/Action-/run-length-encoding.action
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
BYTE FUNC GetLength(CHAR ARRAY s BYTE pos)
|
||||
CHAR c
|
||||
BYTE len
|
||||
|
||||
c=s(pos)
|
||||
len=1
|
||||
DO
|
||||
pos==+1
|
||||
IF pos<=s(0) AND s(pos)=c THEN
|
||||
len==+1
|
||||
ELSE
|
||||
EXIT
|
||||
FI
|
||||
OD
|
||||
RETURN (len)
|
||||
|
||||
BYTE FUNC GetNumber(CHAR ARRAY s BYTE POINTER pos)
|
||||
BYTE num,len
|
||||
CHAR ARRAY tmp(5)
|
||||
|
||||
len=0
|
||||
DO
|
||||
len==+1
|
||||
tmp(len)=s(pos^)
|
||||
pos^==+1
|
||||
IF s(pos^)<'0 OR s(pos^)>'9 THEN
|
||||
EXIT
|
||||
FI
|
||||
OD
|
||||
tmp(0)=len
|
||||
num=ValB(tmp)
|
||||
RETURN (num)
|
||||
|
||||
PROC Append(CHAR ARRAY text,suffix)
|
||||
BYTE POINTER srcPtr,dstPtr
|
||||
BYTE len
|
||||
|
||||
len=suffix(0)
|
||||
IF text(0)+len>255 THEN
|
||||
len=255-text(0)
|
||||
FI
|
||||
IF len THEN
|
||||
srcPtr=suffix+1
|
||||
dstPtr=text+text(0)+1
|
||||
MoveBlock(dstPtr,srcPtr,len)
|
||||
text(0)==+suffix(0)
|
||||
FI
|
||||
RETURN
|
||||
|
||||
PROC Encode(CHAR ARRAY in,out)
|
||||
BYTE pos,len
|
||||
CHAR ARRAY tmp(5)
|
||||
|
||||
pos=1 len=0 out(0)=0
|
||||
WHILE pos<=in(0)
|
||||
DO
|
||||
len=GetLength(in,pos)
|
||||
StrB(len,tmp)
|
||||
Append(out,tmp)
|
||||
out(0)==+1
|
||||
out(out(0))=in(pos)
|
||||
pos==+len
|
||||
OD
|
||||
RETURN
|
||||
|
||||
PROC Decode(CHAR ARRAY in,out)
|
||||
BYTE pos,num,i
|
||||
CHAR c
|
||||
|
||||
pos=1 out(0)=0
|
||||
WHILE pos<=in(0)
|
||||
DO
|
||||
num=GetNumber(in,@pos)
|
||||
c=in(pos)
|
||||
pos==+1
|
||||
FOR i=1 TO num
|
||||
DO
|
||||
out(0)==+1
|
||||
out(out(0))=c
|
||||
OD
|
||||
OD
|
||||
RETURN
|
||||
|
||||
PROC Main()
|
||||
CHAR ARRAY data="WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"
|
||||
CHAR ARRAY encoded(256),decoded(256)
|
||||
|
||||
PrintE("original:")
|
||||
PrintE(data)
|
||||
PutE()
|
||||
|
||||
Encode(data,encoded)
|
||||
PrintE("encoded:")
|
||||
PrintE(encoded)
|
||||
PutE()
|
||||
|
||||
Decode(encoded,decoded)
|
||||
PrintE("decoded:")
|
||||
PrintE(decoded)
|
||||
RETURN
|
||||
Loading…
Add table
Add a link
Reference in a new issue