Factor:
USING: kernel strings command-line namespaces math.parser sequences io ;
IN: l
: c ( s -- C )
"" swap
[ dup empty? not ] [
dup dup dup first '[ _ = not ] find drop
dup not [ drop length ] [ nip ] if
2dup tail
[ number>string [ first 1string ] dip append append ] dip
] while drop
;
MAIN: [ command-line get first c print ]
Benchmark using compiled binary:
$ hyperfine "./compress/compress aaabbhhhh33aaa"
Benchmark 1: ./compress/compress aaabbhhhh33aaa
Time (mean ± σ): 3.6 ms ± 0.4 ms [User: 1.4 ms, System: 2.2 ms]
Range (min … max): 3.0 ms … 6.0 ms 575 runs