$10K coding deathmatch
Daniel C.
dcrookston at gmail.com
Fri Nov 3 10:03:40 MST 2006
For a language whose brevity is much praised, this solution -
especially compared to the Perl one - is a bit long. I suppose the
problem size has a lot to do with it.
On 11/3/06, Levi Pearson <levi at cold.org> wrote:
> Someone wanted to see a Lisp solution. Well, here's one:
>
> ;;;; A solution in Common Lisp to the mozy.com Deathmatch sample
> question
>
> (defun split-string (string char)
> "Returns a list of substrings of string delimited by the given
> character"
> (loop for i = 0 then (1+ j)
> as j = (position char string :start i)
> collect (subseq string i j)
> while j))
>
> (defun check (list)
> "Given a list of strings representing integers, return t when the
> difference between every two adjacent integers has a magnitude
> greater than 0 and less than the length of the list, and nil otherwise"
> (let ((n (length list)))
> (catch 'fail
> (reduce (lambda (x y)
> (let ((diff (abs (- (parse-integer x)
> (parse-integer y)))))
> (unless (and (> diff 0)
> (< diff n))
> (throw 'fail nil))
> y))
> list)
> t)))
>
> (defun check-line (line)
> "Given a line of input, print 'match' if it matches the criteria
> of the check predicate and 'not a match' otherwise"
> (if (check (split-string line #\Space))
> (format t "match~%")
> (format t "not a match~%")))
>
> ;; Check lines until the program is terminated
> (loop (check-line (read-line)))
>
>
> /*
> PLUG: http://plug.org, #utah on irc.freenode.net
> Unsubscribe: http://plug.org/mailman/options/plug
> Don't fear the penguin.
> */
>
More information about the PLUG
mailing list