RosettaCodeData/Task/Burrows-Wheeler-transform/TXR/burrows-wheeler-transform.txr

15 lines
414 B
Text
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
(defvarl eof "\xDC00")
(defun bwt (str)
(if (contains eof str)
(error "~s: input may not contain ~a" %fun% eof))
(let ((seof `@str@eof`))
(flow 0..(len seof) (mapcar (op rot seof)) sort (mappend last))))
(defun ibwt (str)
(let* ((ch (tuples 1 str))
(row (sort ch)))
(dotimes (i (pred (len str)))
(upd row (mapcar append ch) nsort))
[(find-if (op ends-with eof) row) 0..-1]))