19 lines
661 B
Plaintext
19 lines
661 B
Plaintext
to encode :str [:out "||] [:count 0] [:last first :str]
|
|
if empty? :str [output (word :out :count :last)]
|
|
if equal? first :str :last [output (encode bf :str :out :count+1 :last)]
|
|
output (encode bf :str (word :out :count :last) 1 first :str)
|
|
end
|
|
|
|
to reps :n :w
|
|
output ifelse :n = 0 ["||] [word :w reps :n-1 :w]
|
|
end
|
|
to decode :str [:out "||] [:count 0]
|
|
if empty? :str [output :out]
|
|
if number? first :str [output (decode bf :str :out 10*:count + first :str)]
|
|
output (decode bf :str word :out reps :count first :str)
|
|
end
|
|
|
|
make "foo "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW
|
|
make "rle encode :foo
|
|
show equal? :foo decode :rle
|