From 676a61e0bda0e16a3adf7ac5f70bf44fa14ff46f Mon Sep 17 00:00:00 2001 From: Toshihiro Shimizu Date: Sun, 8 Dec 2024 16:41:36 +0900 Subject: [PATCH] update --- .../extra/string/run_length_compress.nim | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/atcoder/extra/string/run_length_compress.nim diff --git a/src/atcoder/extra/string/run_length_compress.nim b/src/atcoder/extra/string/run_length_compress.nim new file mode 100644 index 0000000..43b6231 --- /dev/null +++ b/src/atcoder/extra/string/run_length_compress.nim @@ -0,0 +1,26 @@ +when not declared ATCODER_RUN_LENGTH_COMPRESS_HPP: + const ATCODER_RUN_LENGTH_COMPRESS_HPP* = 1 + import strutils + proc encode*(s:string):seq[tuple[c:char, n:int]] = + var i = 0 + while i < s.len: + var j = i + while j < s.len and s[i] == s[j]: j.inc + result.add (s[i], j - i) + i = j + + proc decode*(a:seq[tuple[c:char, n:int]]):string = + for (c, n) in a: + result.add c.repeat(n) + + proc encode*[T](s:seq[T]):seq[tuple[c:T, n:int]] = + var i = 0 + while i < s.len: + var j = i + while j < s.len and s[i] == s[j]: j.inc + result.add (s[i], j - i) + i = j + + proc decode*[T](a:seq[tuple[c:T, n:int]]):seq[T] = + for (c, n) in a: + result.add c.repeat(n)