28 lines
726 B
Plaintext
28 lines
726 B
Plaintext
(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)))
|