; 入力を全て受け取り0-9の配列にカウントしていく ; 2で割れた回数とカウントが奇数の個数を足して4で割った数を足す (defun main () (let* ((n (read)) ; 初期値 0, 要素数 10 の配列を作成する (xs (make-array 10 :initial-element 0))) ; 入力される数は 3 * n個 (dotimes (_ (* 3 n)) ; incf n は setq n (1+ n) と同じ働きを持つ (incf ; aref は配列へのアクセス (aref xs (1- (read))))) (let ((s (+ ; across キーワードは loop マクロの中で ; 配列を走査するときに使う (loop for c across xs ; ash x i ; x を i ビット左へシフトする関数 ; i が負の数ならば右へ (abs i) ビットシフトする sum (ash c -1)) ; floor 関数は数値の切り捨てに使う関数だが ; 割り算の結果を整数に切り捨てるときにも使われる (floor ; count-if pred seq ; pred を満たす seq 内の要素の個数を返す関数 (count-if #'oddp xs) 4)))) (princ s) (terpri)))) (main)