; 幅リスト Wi を昇べきsort ; ブロックの幅 Wi を順に足す ; 箱の幅 L を超えたときの値を出力(0-indexed) (defun main () (let* ((l (read)) (n (read)) (ws (sort (loop ; repeat キーワードは loop マクロの中で ; 指定回数だけループを行うために使う repeat n ; collect キーワードは loop マクロの中で ; 要素を収集してリストを作成するために使う collect (read)) ; sort関数は比較関数を設定することで ; 昇べきの順に並べることができる #'<))) (loop ; below キーワードは loop マクロの中で ; 特定の値未満までの範囲を指定するために使う for i below n ; in キーワードは loop マクロの中で ; リストやコレクションを走査するときに使う for w in ws ; sum キーワードは項目を合計するために使う ; into キーワードは loop マクロの中で ; 結果を特定のコレクションに集めるために使う sum w into total ; until キーワードは loop マクロの中で ; 特定の条件が満たされるまでループするために使う until (> total l) ; finally キーワードは loop マクロの中で ; ループが終了した後に実行したい処理を指定するために使う finally (progn (princ i) (terpri))))) (main)