Run-length encoding: Difference between revisions

Content added Content deleted
Line 2,561: Line 2,561:
<lang Racket>
<lang Racket>
#lang racket
#lang racket

(define (encode str)
(define (encode str)
(regexp-replace* #px"(.)\\1*" str
(regexp-replace* #px"(.)\\1*" str (λ (m c) (~a (string-length m) c))))
(λ (m c) (~a (string-length m) c))))

(define (decode str)
(define (decode str)
(regexp-replace* #px"([0-9]+)(.)" str
(regexp-replace* #px"([0-9]+)(.)" str (λ (m n c) (make-string (string->number n) (string-ref c 0)))))
(λ (m n c) (make-string (string->number n)
(string-ref c 0)))))
</lang>
</lang>