Comment detail

自然数の分割(別表現) (Nested Flatten)

たぶん普通。accumulator は文字列にしてみました。

Celeron 2.66GHz, CLISP での実行結果:

Real time: 11.625 sec.
Run time: 11.609375 sec.
Space: 438337756 Bytes
GC: 836, GC time: 3.546875 sec.

何も出力しないと 9 秒ちょっとでした。出力以外のほうが時間食ってます。文字列生成のコストが高い?

1
2
3
4
5
6
7
8
9
(defun young-1 (n m &optional (w (- n m -1)) (prefix ""))
  (if (= m 0) (and (= n 0) (write-line prefix))
    (when (<= m n)
      (loop for k from w downto (ceiling n m)
        as s = (concatenate 'string prefix #(#\Newline)
                            (make-string k :initial-element #\WHITE_SQUARE))
        do (young-1 (- n k) (1- m) k s)))))

(defun young (n) (loop for m from 1 to n do (young-1 n m)))

Index

Feed

Other

Link

Pathtraq

loading...