Jolly Number란 n개의 요소를 가진 배열내의 인접한 요소간의 차이가 1 ~ n-1 사이의 값을 모두 가지는 배열을 말한다.

; 두 값의 차이를 구함
(defun difference (x y)
(abs (- x y)))
; 리스트내 인접한 두 요소의 차이를 요소로 하는 리스트
(defun successive-diff (lst)
(cond ((null lst) nil)
((< (length lst) 2) nil)
(T
(cons (difference (first lst) (second lst))
(successive-diff (cdr lst))))))
; 해당 리스트의 모든 요소가 1씩 증가하는지 검사
(defun inc-by-1 (lst)
(cond ((null lst) t)
((< (length lst) 2) t)
(t
(and (= (+ 1 (first lst))
(second lst))
(inc-by-1 (cdr lst))))))
(defun jollyp (lst)
(inc-by-1 (sort (remove-duplicates
(cons (- (length lst) 1) (cons 1 (successive-diff lst))))
#'<)))

댓글 없음:
댓글 쓰기