[SPOILER] Re: [quiz] call for quizzes, and [QUIZ 4] centering

Larry Clapp larry at theclapp.org
Thu Jul 12 11:15:47 UTC 2007


On Thu, Jul 12, 2007 at 06:58:04AM -0400, Larry Clapp wrote:
> Your solution highlights some of the possible axes of judging, aka
> design trade-offs, kind of like Kent is always harping^W reminding us
> about in c.l.l.  Specifically, your solution conses a little more than
> mine, but since you use reduce and mapcan and I use loop (twice),
> yours seems "Lispier".

My solution:

  (defun center (&rest list)
    (let* ((max-length (loop for item in list maximize (length item)))
	   (center (floor max-length 2)))
      (loop for item in list
	    for length = (length item)
	    collect (format nil "~v,0T~A" (- center (floor length 2)) item))))

Outputs:

  QUIZ 15 > (center "this" "is" "a test of the" "center function")
  ("     this" "      is" " a test of the" "center function")

I realize now that I should simplify my math:

  (defun center2 (&rest list)
    (let ((max-length (loop for item in list maximize (length item))))
      (loop for item in list
	    collect (format nil "~v,0T~A" 
			    (floor (- max-length (length item)) 2)
			    item))))

So far, I like Sean's solution the best.  For reference, Sean wrote:

  (defun center (&rest list)
    (let ((max (reduce #'max vals :key #'length)))
      (mapcar #'(lambda (x)
		  (format nil "~,,v at A" (floor (- max (length x)) 2) x))
	      list)))

-- L




More information about the Quiz mailing list