Run-length encoding: Difference between revisions
Content added Content deleted
(Emacs Lisp: Completely rewrite solutions to something readable) |
|||
Line 2,286: | Line 2,286: | ||
=={{header|Emacs Lisp}}== |
=={{header|Emacs Lisp}}== |
||
<lang lisp> |
<lang lisp>(defun run-length-encode (str) |
||
(let (output) |
|||
⚫ | |||
(with-temp-buffer |
|||
"Return the run length encoding of a string argument STR_ARG." |
|||
(insert str) |
|||
(goto-char (point-min)) |
|||
(while (not (eobp)) |
|||
(let* ((char (char-after (point))) |
|||
(count (skip-chars-forward (string char)))) |
|||
(push (format "%c%d" char count) output)))) |
|||
(mapconcat #'identity (nreverse output) "")))</lang> |
|||
{{libheader|seq.el}} |
|||
(let ((dalist (string-to-list str_arg)) (letters) (frequency)) |
|||
<lang lisp>(require 'seq) |
|||
⚫ | |||
(dolist (element dalist) |
|||
(let ((grouped (mapcar #'cdr (seq-group-by #'identity (string-to-list str))))) |
|||
(if (not (equal (car letters) element)) |
|||
(apply #'concat (mapcar (lambda (items) |
|||
(progn |
|||
(format "%c%d" (car items) (length items))) |
|||
(setq letters (cons element letters)) |
|||
grouped))))</lang> |
|||
(setq frequency (cons 1 frequency))) |
|||
(setq frequency (cons (+ (car frequency ) 1) (cdr frequency))))) |
|||
(apply 'concat |
|||
(reverse |
|||
(mapcar* |
|||
(lambda (x y) (concat (number-to-string x) |
|||
(char-to-string y))) |
|||
frequency letters))))) |
|||
</lang> |
|||
=={{header|Erlang}}== |
=={{header|Erlang}}== |