LZW compression: Difference between revisions

m
→‎{{header|Julia}}: update from Julia 0.6 to 1.1.1
(→‎{{header|Haskell}}: Replaced older liftM2 and ap with <$> ... <*> etc. Added main and GHC output.)
m (→‎{{header|Julia}}: update from Julia 0.6 to 1.1.1)
Line 2,465:
 
=={{header|Julia}}==
{{works with|Julia|01.61.1}}
<lang julia>function compressLZW(decompressed::String)
dictsize = 256
dict = Dict{String,Int}(string(Char(i)) => i for i in range(0, :dictsize))
result = Vector{Int}(undef, 0)
w = ""
for c in decompressed
Line 2,485:
return result
end
 
function decompressLZW(compressed::Vector{Int})
dictsize = 256
dict = Dict{Int,String}(i => string('\0' + i) for i in range(0, :dictsize))
result = IOBuffer()
w = string(Char(shiftpopfirst!(compressed)))
write(result, w)
for k in compressed
Line 2,505:
w = entry
end
return String(take!(result))
end
 
original = ["0123456789", "TOBEORNOTTOBEORTOBEORNOT", "dudidudidudida"]
compressed = compressLZW.(original)
decompressed = decompressLZW.(compressed)
 
for (word, comp, decomp) in zip(original, compressed, decompressed)
comprate = (length(word) - length(comp)) / length(word) * 100
println("Original: $word\n-> Compressed: $comp (compr.rate: $(round(comprate, digits=2))%)\n-> Decompressed: $decomp")
end</lang>
 
Anonymous user