(defun count-and-say (str) (let* ((s [sort (copy-str str) <]) (out `@[s 0]0`)) (each ((x s)) (if (eql x [out -1]) (inc [out -2]) (set out `@{out}1@x`))) out)) (defun ref-seq-len (n : doprint) (let ((s (tostring n)) hist) (while t (push s hist) (if doprint (pprinl s)) (set s (count-and-say s)) (each ((item hist) (i (range 0 2))) (when (equal s item) (return-from ref-seq-len (length hist))))))) (defun find-longest (top) (let (nums (len 0)) (each ((x (range 0 top))) (let ((l (ref-seq-len x))) (when (> l len) (set len l) (set nums nil)) (when (= l len) (push x nums)))) (list nums len)))