Let's write β

プログラミング中にできたことか、思ったこととか

ICPC2012 Problem A

ICPC2012の問題が公開になりました。
http://www.psg.cs.titech.ac.jp/icpc/icpc2012/contest/all_ja.html
というわけでLispで解いてみましょう。
さて、ProblemAですが、こんな感じですかね。

(defun calc-year-day (year)
  (if (zerop (mod year 3))
      (* 20 10)
      (+ (* 20 5) (* 19 5))))

(defun convert-to-day (year month day)
  (let ((res 0))
    ;;Year
    (loop for y from 1 to (1- year)
	 do (incf res (calc-year-day y)))
    ;;Month
    (if (zerop (mod year 3))
	(loop for m from 1 to (1- month)
	   do (incf res 20))
	(loop for m from 1 to (1- month)
	   do (incf res (if (evenp m) 19 20))))
    ;;Day
    (incf res day)
    res))

(defvar *mirenium-aniv-day* (conver-to-day 1000 1 1))

(defun main ()
  (let ((n (read)))
    (loop for i from 1 upto n
	 do
	 (format t "~A~%" (- *mirenium-aniv-day* (convert-to-day (read) (read) (read)))))))

とりあえず、サンプルインプットには正解が出力されますね。
こういう簡単な入出力ができたり、少々何も考えないコードでも読みやすく
書けるところがLispの良いところですなぁ...