1. A – Dice
Common Lisp では、3以上の引数でも比較ができます。
(defun print-yesno (c)
(princ (if c "Yes" "No")))
(defun main ()
(let* ((x (read)))
(print-yesno (<= 3 x 18))))
#-swank(main)Code language: Lisp (lisp)

2. B – 456
2次元ベクトルから、出現数をカウントして、確率の元にしました(times-vec)。
また、どのサイコロで4, 5, 6を出すかを組み合わせリストを作って、それぞれの確率を合計しました(take-3s)。
;; (times-vec 3 6 '((1 2 3 4 5 6) (1 2 3 4 5 6) (1 2 3 4 5 6)))
(defun times-vec2d (M N Amn)
(loop for An in Amn
for i from 0
with vec = (make-array (list M (1+ N)) :initial-element 0)
do (loop for A in An
do (incf (aref vec i A)))
finally (return vec)))
(defun take-3s (N)
(loop for i below N
append (loop for j below N
append (loop for k below N
when (/= i j k)
collect (list i j k)))))
;; (defparameter Amn '((1 2 3 4 5 6) (1 2 3 4 5 6) (1 2 3 4 5 6)))
(defun solve (M N Amn)
(let* ((times (times-vec2d M N Amn))
(take-dices (take-3s 3)))
(loop for (d1 d2 d3) in take-dices
sum (/ (* (aref times d1 4)
(aref times d2 5)
(aref times d3 6))
(* 6 6 6)))))
(defun main ()
(let* ((M 3)
(N 6)
(Amn (loop repeat M
collect (loop repeat N
collect (read)))))
(format t "~f" (coerce (solve M N Amn) 'double-float))))
#-swank(main)Code language: Lisp (lisp)

3. C – Not Adjacent
どこで隣接しているか、インデックスのリストを求めました(adjecent-positions)。
そこが「節」になるので、あとは、その区間の組み合わせを計算して(combi2)、かけ合わせてました。
(defun adjacent-positions (str)
(loop for i from 0 below (1- (length str))
when (eql (char str i) (char str (1+ i)))
collect i))
(defun combi2 (n)
(/ (* n (1- n)) 2))
(defparameter *prime* 998244353)
(defun not-adjacent-pattern (str)
(let* ((poss (adjacent-positions str))
(lst (cons -1 (append poss (list (1- (length str)))))))
(loop for (a b) on lst
while b
sum (mod (combi2 (1+ (- b a))) *prime*))))
(defun main ()
(let* ((S (read-line)))
(princ (not-adjacent-pattern S))))
#-swank(main)
Code language: Lisp (lisp)

4. D – G 時間切れ
時間内に正答せず、1日考えました。
5. E
Code language: Lisp (lisp)
6. F
Code language: Lisp (lisp)
7. G
Code language: Lisp (lisp)