(defun solve (file) (with-open-file (in file) (let ((ncases (read in))) (dotimes (caseno ncases) (solve-case caseno in))))) (defun solve-case (caseno in) (let ((n (read in))) (let ((wires (make-array (list n)))) (dotimes (i n) (setf (aref wires i) (cons (read in) (read in)))) (let ((sol (intersections wires))) (format t "Case #~D: ~D~%" (1+ caseno) sol))))) (defun intersections (wires) (let ((result 0)) (do ((i 0 (1+ i))) ((>= i (length wires)) result) (do ((j (1+ i) (1+ j))) ((>= j (length wires))) (when (intersectsp (aref wires i) (aref wires j)) (incf result)))))) (defun intersectsp (w1 w2) (if (< (car w1) (car w2)) (> (cdr w1) (cdr w2)) (< (cdr w1) (cdr w2))))
Sunday, May 23, 2010
GCJ 2010: Rope Intranet in Common Lisp (Online Round 1C)
I failed at online round 1 this year, although I tried twice in sub-rounds 1B and 1C. The first puzzle in sub-round 1C, Rope Intranet was easy, and I handed in the correct solutions for both the small and the large input in less than ten minutes. Here is the straightforward code:
Labels:
Lisp GCJ
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment