AtCoder abc456_a

関連記事

1. A – Dice

(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)
1. A – Dice

2. B – 456

(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)))))

;; (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)))

;; (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)
2. B – 456

3. C – Not Adjacent

(defun adjacent-positions (str)
  (loop for i from 0 below (1- (length str))
	when (eql (char str i) (char str (1+ i)))
	  collect i))

(defparameter *dp-fact* (make-hash-table))
(defun fact (n)
  (setf (gethash n *dp-fact*) 
	(cond ((gethash n *dp-fact*))
	      ((= n 0) 1)
	      ((= n 1) 1)
	      (t (* n (fact (1- n)))))))

(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)
3. C – Not Adjacent

4. D

Code language: Lisp (lisp)

5. E

Code language: Lisp (lisp)

6. F

Code language: Lisp (lisp)

7. G

Code language: Lisp (lisp)