(defun count-unique-values (list)
(let ((map (make-hash-table)))
(loop for x in list
do (setf (gethash x map) 1))
(hash-table-count map)))
(defun count-unique-values-2 (list)
(let ((sorted (sort (copy-list list) #'>))
(unique 0)
last)
(dolist (x sorted)
(unless (eql last x)
(incf unique)
(setf last x)))
unique))
(defun test (list)
(format t "Testing ~a: ~a ~%" list (count-unique-values-2 list)))
(progn
(test '(1 2 3))
(test '(1 2 3 3))
(test '(1 1 2 2 3 3)))
KGRlZnVuwqBjb3VudC11bmlxdWUtdmFsdWVzwqAobGlzdCkKwqDCoChsZXTCoCgobWFwwqAobWFrZS1oYXNoLXRhYmxlKSkpCsKgwqDCoMKgKGxvb3DCoGZvcsKgeMKgaW7CoGxpc3QKwqDCoMKgwqDCoMKgwqBkb8KgKHNldGbCoChnZXRoYXNowqB4wqBtYXApwqAxKSkKICAgIMKgwqDCoMKgKGhhc2gtdGFibGUtY291bnTCoG1hcCkpKQoKKGRlZnVuIGNvdW50LXVuaXF1ZS12YWx1ZXMtMiAobGlzdCkKICAobGV0ICgoc29ydGVkIChzb3J0IChjb3B5LWxpc3QgbGlzdCkgIyc+KSkKICAgICAgICAodW5pcXVlIDApCiAgICAgICAgbGFzdCkKICAgIChkb2xpc3QgKHggc29ydGVkKQogICAgICAodW5sZXNzIChlcWwgbGFzdCB4KQogICAgICAgIChpbmNmIHVuaXF1ZSkKICAgICAgICAoc2V0ZiBsYXN0IHgpKSkKICAgIHVuaXF1ZSkpCgoKKGRlZnVuIHRlc3QgKGxpc3QpCiAgKGZvcm1hdCB0ICJUZXN0aW5nIH5hOiB+YSB+JSIgbGlzdCAoY291bnQtdW5pcXVlLXZhbHVlcy0yIGxpc3QpKSkKCihwcm9nbgogICh0ZXN0ICcoMSAyIDMpKQogICh0ZXN0ICcoMSAyIDMgMykpCiAgKHRlc3QgJygxIDEgMiAyIDMgMykpKQoKCgo=