1. A – First Grit
2×2のグリッドなので、黒が3以上なら無条件で隣接します。
あとは、黒が2個で (0,0)と(1,1)が同じ色(白または黒)のときだけ隣接します。
(defun black-connected-p (lst)
(or (>= (count #\# lst) 3)
(char/= (elt lst 0) (elt lst 3))))
;; (char-list '("##" ".#"))
(defun char-list (lines)
(loop for str in lines
append (loop for ch across str
collect ch)))
(defun yesno (c)
(if c "Yes" "No"))
(defun main()
(let* ((lines (list (read-line) (read-line))))
(princ (yesno (black-connected-p (char-list lines))))))
(main)Code language: Lisp (lisp)

2. B – Similar String
似ている文字という条件を、condで表現しました。
対応リストにしたらもっとすっきり書けたかも。
(defun similar-char-p (a b)
(cond ((eql a b))
((eql a #\1) (eql b #\l))
((eql a #\l) (eql b #\1))
((eql a #\0) (eql b #\o))
((eql a #\o) (eql b #\0))
(t nil)))
;; (similar-string-p "hello" "he1l0")
(defun similar-string-p (sa sb)
(loop for i below (length sa)
always (similar-char-p (char sa i) (char sb i))))
(defun yesno (c)
(if c "Yes" "No"))
(defun main ()
(let* ((nn (read))
(ss (read-line))
(st (read-line)))
(declare (ignore nn))
(princ (yesno (similar-string-p ss st)))))
#-swank(main)
Code language: Lisp (lisp)

3. C – You’re a teapot
文字列ごとのt充填率を計算して、部分文字列全体で最大値を求めます。
(defun tea-rate (tt)
(let* ((len (length tt)))
(cond ((and (>= len 3)
(char= #\t (char tt 0) (char tt (1- len))))
(float (/ (- (count #\t tt) 2) (- len 2))))
(t 0))))
(defun max-tea-rate (s)
(loop for i below (length s)
maximize (loop for j from (1+ i) to (length s)
maximize (tea-rate (subseq s i j)))))
(defun main ()
(princ (max-tea-rate (read-line))))
#-swank(main)
Code language: Lisp (lisp)
ただし、これでは不正解 21でした。

3.1. コード2(倍精度小数点数)
どうも、floatでは、精度が足りていないようです。
出力された値と真の値との絶対誤差が 10−9 以下のとき、正答と判定される。
そこで、分数を倍精度小数点数に変換しました。
出力では、末尾にd0を付けないように format t “~f”を使いました。
(defun tea-rate (tt)
(let* ((len (length tt)))
(cond ((and (>= len 3)
(char= #\t (char tt 0) (char tt (1- len))))
(coerce (/ (- (count #\t tt) 2) (- len 2)) 'double-float))
(t 0d0))))
(defun max-tea-rate (s)
(loop for i below (length s)
maximize (loop for j from (1+ i) to (length s)
maximize (tea-rate (subseq s i j)))))
(defun main ()
(format t "~f" (max-tea-rate (read-line))))
#-swank(main)
Code language: Lisp (lisp)
時間切れになってしまいましたが、無事に正解しました。

