Sha256: 2a04301ca4d37af50d82ae7abb23a799e1665b2a3399aed26a939830182bd81e

Contents?: true

Size: 1.37 KB

Versions: 24

Compression:

Stored size: 1.37 KB

Contents

;;; run-length-encoding.el --- run-length-encoding Exercise (exercism)

;;; Commentary:

;;; Code:


(defun run-length-group (s)
  "return list of character run counts"
  (let ((case-fold-search nil)
	groups)
    (with-temp-buffer
      (insert s)
      (goto-char (point-min))
      (while (re-search-forward "\\(.\\)\\1*" nil t)
	(push (cons
	       (length (match-string 0))
	       (match-string 1))
	      groups)))
    (nreverse groups)))

;; (run-length-group "bbaaaac")


(defun run-length-encode (s)
  "encodes a string with run-length-encoding"
  (mapconcat (lambda (v)
	       (if (= (car v) 1)
		   (cdr v)
		 (format "%d%s" (car v) (cdr v))))
	     (run-length-group s)
	     ""))

;; "2a3b4c" (run-length-encode "aabbbcccc")


(defun run-length-parse (s)
  "split string into pairs containing a count and a character"
  (let (rtn)
    (with-temp-buffer
      (insert s)
      (goto-char (point-min))
      (while (re-search-forward "\\([0-9]*\\)\\(.\\)" nil t)
	(push (cons
	       (string-to-number (match-string 1))
	       (string-to-char (match-string 2)))
	      rtn)))
    (nreverse rtn)))

;; (run-length-parse "2a3b4cz")


(defun run-length-decode (s)
  "decodes a run-length-encoded string"
  (mapconcat (lambda (n)
	       (make-vector (if (= (car n) 0) 1 (car n)) (cdr n)))
	     (run-length-parse s)
	     ""))


(provide 'run-length-encoding)
;;; run-length-encoding.el ends here

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.179 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.178 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.177 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.176 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.175 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.174 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.173 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.172 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.171 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.170 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.169 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.167 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.166 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.165 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.164 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.163 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.162 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.161 tracks/elisp/exercises/run-length-encoding/example.el
trackler-2.2.1.160 tracks/elisp/exercises/run-length-encoding/example.el