(defun read-points () (list (read) (read) (read) (read) (read) (read))) (defun calculate-area (x1 y1 x2 y2 x3 y3) (/ (abs (- (+ (* x1 (- y2 y3)) (* x2 (- y3 y1)) (* x3 (- y1 y2))))) 2.0)) (defun max-triangle-area (points) (let* ((x1 (nth 0 points)) (y1 (nth 1 points)) (x2 (nth 2 points)) (y2 (nth 3 points)) (x3 (nth 4 points)) (y3 (nth 5 points)) (deltas '((1 0) (-1 0) (0 1) (0 -1))) (max-area 0.0)) (dolist (d1 deltas) (dolist (d2 deltas) (dolist (d3 deltas) (let* ((new-x1 (+ x1 (car d1))) (new-y1 (+ y1 (cadr d1))) (new-x2 (+ x2 (car d2))) (new-y2 (+ y2 (cadr d2))) (new-x3 (+ x3 (car d3))) (new-y3 (+ y3 (cadr d3))) (area (calculate-area new-x1 new-y1 new-x2 new-y2 new-x3 new-y3))) (setf max-area (max max-area area)))))) max-area)) (let ((points (read-points))) (format t "~f~%" (max-triangle-area points)))