Someone wrote a kind of mashup that walks the Google Code Jam submission/score database, and which allows queries e.g. per programming language. Here's the statistics for Lisp:
http://www.go-hero.net/jam/09/lang/Lisp
I registered as "insertsomethingwitty" (I have never been good with pseudonyms), and you can find my submissions here: http://www.go-hero.net/jam/09/name/insertsomethingwitty
Bribe the Prisoners
In the two rounds I participated in ("Qualifier" and 1C), I managed to submit correct solutions for all problem sets except for the very last one, namely the "large input" for "Bribe the prisoners". I took a bad approach to that one, and was lucky to even finish the small input set before the end of the round (2h30 for three problems).
After a nice walk, I found a simpler approach. I had to apply memoization to make it efficient, and then I was able to run the large input set in about two minutes on my netbook - the limit is eight minutes. Here is the new code.
(defun solve (file &optional (dest t)) (with-open-file (s file) (let ((nsamples (parse-integer (read-line s)))) (dotimes (k nsamples) (solve-case k s dest))))) (defvar *memo* (make-hash-table :test #'equal)) (defun solve-case (caseno s dest) (clrhash *memo*) (let ((line (mapcar #'parse-integer (split-at-spaces (read-line s))))) (multiple-value-bind (p q) (values (first line) (second line)) (let ((rel (mapcar #'parse-integer (split-at-spaces (read-line s))))) (assert (= (length rel) q)) (format dest "Case #~D: ~D~%" (1+ caseno) (minbribe p rel)))))) (defun minbribe (p rel &aux entry) (cond ((endp rel) 0) ((endp (rest rel)) (1- p)) ((setq entry (gethash (cons p rel) *memo*)) entry) (t (setf (gethash (cons p rel) *memo*) (reduce #'min (mapcar #'(lambda (prisoner) (minbribe-1 prisoner p rel)) rel)))))) (defun minbribe-1 (prisoner p rel) (cond ((<= p 1) 0) (t (+ (- p 1) (multiple-value-bind (p1 rel1 p2 rel2) (split-cells prisoner p rel) (+ (minbribe p1 rel1) (minbribe p2 rel2))))))) (defun split-cells (prisoner p rel) (do ((rel rel (rest rel)) (seq1 '() (cons (first rel) seq1))) ((= (first rel) prisoner) (do ((rel (rest rel) (rest rel)) (seq2 '() (cons (- (first rel) prisoner) seq2))) ((endp rel) (values (1- prisoner) (nreverse seq1) (- p prisoner) (nreverse seq2)))))))