ぐるっとぐりっど

日曜プログラマがいろいろ試してみたことを、後の自分のためにまとめておく場所

google code jamをlispでときたい!! その2

残念ながら、google code jamは一回戦敗退でした。

最近はお仕事のほうがなんやかんやいろいろあって、ソースコードをいじれてないですが、通勤時間や休日に、初めての人のためのLISPやらLand of Lispやらを読んでます。どっちも面白いですね。おちゃらけた感じが。

で、Land of Lispを読んでたら、前回がんばって書いた、とりあえず入力ファイルをS式に変換するだけの関数をもっと簡単にかけそうな方法が乗ってたのでやってみました。

(defun load-file nil
  (with-open-file (in "A.in.txt" :direction :input)
		  (let ((result))
		    (do ((line (read-line in nil)
			       (read-line in nil)))
			((null line) result)
			(setf result
			      (append result
				      (list (read-from-string (concatenate 'string "(" line ")")))))))))

;;;とりあえず変換したS式を出力しておく
(format t "~A~%" (load-file))

関数concatenateを使って、(テキストファイルの1行を結合して、S式の形の文字列に変換してから、read-from-stringでS式として解釈させるところがミソですね

ステップ数(?)およそ半減に成功しました!!
この調子でがんばろう!!