Run-length encoding: Difference between revisions

Content added Content deleted
(→‎{{header|C}}: semi serious method)
(→‎{{header|Euphoria}}: Euphoria example added)
Line 965: Line 965:
?_assert(decode(encode(PreEncoded)) =:= PreEncoded)
?_assert(decode(encode(PreEncoded)) =:= PreEncoded)
].</lang>
].</lang>

=={{header|Euphoria}}==
<lang euphoria>include misc.e

function encode(sequence s)
sequence out
integer prev_char,count
if length(s) = 0 then
return {}
end if
out = {}
prev_char = s[1]
count = 1
for i = 2 to length(s) do
if s[i] != prev_char then
out &= {count,prev_char}
prev_char = s[i]
count = 1
else
count += 1
end if
end for
out &= {count,prev_char}
return out
end function

function decode(sequence s)
sequence out
out = {}
for i = 1 to length(s) by 2 do
out &= repeat(s[i+1],s[i])
end for
return out
end function

sequence s
s = encode("WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW")
pretty_print(1,s,{3})
puts(1,'\n')
puts(1,decode(s))</lang>

Output:
<pre>{12,'W',1,'B',12,'W',3,'B',24,'W',1,'B',14,'W'}
WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW</pre>


=={{header|F Sharp|F#}}==
=={{header|F Sharp|F#}}==