(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-element0)
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-3s3)))
(loop for (d1 d2 d3) in take-dices
sum (/ (* (aref times d1 4)
(aref times d2 5)
(aref times d3 6))
(*666)))))
(defun main ()
(let* ((M3)
(N6)
(Amn (loop repeat M
collect (loop repeat N
collect (read)))))
(formatt"~f" (coerce (solve M N Amn) 'double-float))))
#-swank(main)Code language:Lisp(lisp)