Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
36
Task/Run-length-encoding/Nim/run-length-encoding.nim
Normal file
36
Task/Run-length-encoding/Nim/run-length-encoding.nim
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import parseutils, strutils
|
||||
|
||||
proc compress(input: string): string =
|
||||
var
|
||||
count = 1
|
||||
prev = '\0'
|
||||
|
||||
for ch in input:
|
||||
if ch != prev:
|
||||
if prev != '\0':
|
||||
result.add $count & prev
|
||||
count = 1
|
||||
prev = ch
|
||||
else:
|
||||
inc count
|
||||
result.add $count & prev
|
||||
|
||||
proc uncompress(text: string): string =
|
||||
var start = 0
|
||||
var count: int
|
||||
while true:
|
||||
let n = text.parseInt(count, start)
|
||||
if n == 0 or start + n >= text.len:
|
||||
raise newException(ValueError, "corrupted data.")
|
||||
inc start, n
|
||||
result.add repeat(text[start], count)
|
||||
inc start
|
||||
if start == text.len: break
|
||||
|
||||
|
||||
const Text = "WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW"
|
||||
|
||||
echo "Text: ", Text
|
||||
let compressed = Text.compress()
|
||||
echo "Compressed: ", compressed
|
||||
echo "Uncompressed: ", compressed.uncompress()
|
||||
Loading…
Add table
Add a link
Reference in a new issue