前回は、
1. D – Enlarged Checker Board
(defun tile-white-p (N A B row col)
(let* ((H (* A N))
(W (* B N)))
(assert (<= 0 row (1- H)))
(assert (<= 0 col (1- W)))
(evenp (+ (floor row A) (floor col B)))))
(defun write-tiles (N A B)
(loop for i from 0 below (* A N)
do (loop for j from 0 below (* B N)
do (princ (if (tile-white-p N A B i j)
#\. #\#)))
(terpri)))
(defun main ()
(let* ((N (read))
(A (read))
(B (read)))
(write-tiles N A B)))
#-swank(main)
Code language: Lisp (lisp)

2. E – Colorful Beans
はじめは、豆を何個か食べて、mini-maxみたいな感じで最大値を求めるのかと思って思案しましたが、この問題では1つしか食べません。
なので、まずはドットリストにしたペアを色に応じて分類し、それぞれを昇順に並べた先頭を比較して、最大を求めました。
(defun hash-list (pairs)
(loop for pair across pairs
with ht = (make-hash-table)
do (push (car pair)
(gethash (cdr pair) ht '()))
finally (return ht)))
;; (classified-list acn) ;=> ((40 100) (20 30))
(defun classified-list (pairs)
(let* ((ht (hash-list pairs)))
(loop for lst being each hash-value of ht
collect (sort lst #'<) )) )
(defun minimums (pairs)
(loop for lst in (classified-list pairs)
collect (car lst)))
(defun solve (pairs)
(reduce #'max (minimums pairs)))
(defun read-dot-pairs (N)
(loop repeat N
collect (cons (read) (read)) into lst
finally (return (coerce lst 'vector))))
(defun main ()
(let* ((N (read))
(pairs (read-dot-pairs N)))
(princ (solve pairs))))
#-swank(main)Code language: Lisp (lisp)

無事に全問正解しました。
