; ソートして場合分け (defun group (lst) (let ((result '()) (cur nil)) (dolist (c lst) (if (null cur) (setq cur (list c)) (if (equal c (car cur)) (push c cur) (progn (push (nreverse cur) result) (setq cur (list c)))))) (when cur (push (nreverse cur) result)) (nreverse result))) (defun f (xs) (cond ((equal xs '(2 3)) "FULL HOUSE") ((equal xs '(1 1 3)) "THREE CARD") ((equal xs '(1 2 2)) "TWO PAIR") ((equal xs '(1 1 1 2)) "ONE PAIR") (t "NO HAND"))) (defun main () (princ (f (sort (map 'list #'length (group (sort (list (read) (read) (read) (read) (read)) #'<))) #'<))) (terpri)) (main)