2012/02/12

プログラミングコンテストチャレンジブック 第2版

ヤーンが死んでから1ヵ月以上経つが、ずっと無気力傾向にある。

そんななか近所の本屋さんブックスキタミに行ったら「プログラミングコンテストチャレンジブック 第2版」を見つけた。失礼ながらその本屋にまさかそんな本があるとは思っていなかった。買った。キタミ見直した。

どうも無気力なので、「プログラミングコンテストチャレンジブック」の例題を Series で解いてステップをとりもどしていきたいと思う。

パッケージは次のとおり。 info.read-eval-print.series-ext は https://github.com/quek/info.read-eval-print.series-ext

(eval-when (:compile-toplevel :load-toplevel :execute)
(require :info.read-eval-print.series-ext))

(info.read-eval-print.series-ext:sdefpackage
:programming-contest-charenge-book
(:use :cl))

(in-package :programming-contest-charenge-book)

info.read-eval-print.series-ext:sdefpackage(SERIES::INSTALL :PKG :PROGRAMMING-CONTEST-CHARENGE-BOOK :IMPLICIT-MAP T) をパッケージ宣言と同時に行いたがためのもの。 Series は是非とも :IMPLICIT-MAP T にすべき。

最初は「1-6 三角形」。

;;;; 1-6 三角形
(let ((a '(2 3 4 5 10)))
(let ((ans 0))
(iterate ((xs (scan-sublists a)))
(iterate ((ys (scan-sublists (cdr xs))))
(iterate ((z (scan (cdr ys))))
(let* ((x (car xs))
(y (car ys))
(sum (+ x y z))
(max (max x y z)))
(if (< max (- sum max))
(setf ans (max ans sum)))))))
ans))

全然 Series をいかせてない。もっとうまく書けないものか。

0 件のコメント: