【AtCoder ABC311B】Vacation Together(Common Lisp)

縦に比較できるように、まずは二次元配列にデータを入れて、それから連続日数を取得しました。
いったん、連続日数をリストにしてから最大値を求めました。

(defun make-ok-days-2d (Sn)
  (declare (type list Sn))
  (let ((vec2d (make-array (list (length Sn) (length (car Sn)))
			    :element-type 'boolean
			    :initial-element t)))
    (loop for str in Sn
	  for mem from 0
	  do (loop for ch across str
		   for day from 0
		   do (setf (aref vec2d mem day)
			    (if (char= ch #\o) t nil)))
	  finally (return vec2d))))

(defun maximum-continual-ok-days (vec2d)
  (reduce #'max 
	  (loop for day below (array-dimension vec2d 1)
		with continued = 0
		if (loop for mem below (array-dimension vec2d 0)
			 always (aref vec2d mem day))
		  collect (incf continued)
		else
		  collect (setf continued 0))))

(defun main ()
  (let* ((N (read))
	 (D (read))
	 (Sn (loop repeat N collect (read-line))))
    (declare (ignore D))
    (princ (maximum-continual-ok-days
	     (make-ok-days-2d Sn)))))

#-swank(main)
#+swank(defparameter *Sn* '("xooox" "oooxx" "oooxo"))
Code language: PHP (php)