21 lines
638 B
Common Lisp
21 lines
638 B
Common Lisp
(defun insert-item (item piles)
|
|
(multiple-value-bind
|
|
(i prev)
|
|
(do* ((prev nil (car x))
|
|
(x piles (cdr x))
|
|
(i 0 (1+ i)))
|
|
((or (null x) (<= item (caaar x))) (values i prev)))
|
|
(if (= i (length piles))
|
|
(append piles (list (list (cons item (caar (last piles))))))
|
|
(progn (push (cons item (car prev)) (elt piles i))
|
|
piles))))
|
|
|
|
(defun longest-inc-seq (input)
|
|
(do* ((piles nil (insert-item (car x) piles))
|
|
(x input (cdr x)))
|
|
((null x) (reverse (caar (last piles))))))
|
|
|
|
(dolist (l (list (list 3 2 6 4 5 1)
|
|
(list 0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15)))
|
|
(format t "~A~%" (longest-inc-seq l)))
|