> Woot!  Good stuff.  BTW, I don't think actually performing the
> calculation was part of the problem description.  As I understood it,
> it was purely string transformation of one time representation to
> another.

Sweet, that lets me simplify things a bit.  This solution assumes
valid input. :)

(defun parse-string (str)
  (apply #'concatenate 'string (mapcar #'process-time (split str #\Space))))

(defun process-time (str)
  (if (digit-char-p (char str 0))
      (write-to-string (let ((place (length (split str #\Colon))))
        (loop for x in (split str #\Colon)
              summing (progn (setf place (1- place))
                             (* (expt 60 place) (read-from-string x))))))
      str))

(defun split (str char)
  (loop for i = 0 then (1+ j)
        as j = (position char str :start i)
        collect (subseq str i j)
        while j))

/*
PLUG: http://plug.org, #utah on irc.freenode.net
Unsubscribe: http://plug.org/mailman/options/plug
Don't fear the penguin.
*/

Reply via email to