;;; This code needs to burrrrn (proclaim '(optimize (speed 3) (space 0) (debug 0) (safety 0) (compilation-speed 0))) (defun bf-possi (n) (declare (fixnum n)) (loop :for j fixnum :from 0 :to (floor n 2) :for n2-next-fac integer :from (- (* -4 n) 10) :by 8 ;V (n - 2j + 1)(n - 2j + 2) V :for n-next-fac :of-type (integer 0 *) = (* (1+ n) (+ 2 n)) :then (+ n2-next-fac n-next-fac) ;V (n - 2j) V ;V n! 6 V ;V ------------------------- V ;V (n - 2j)! (j!)^2 (j + 1) V :for curr :of-type (integer 0 *) = (expt 6 n) :then (* curr (/ n-next-fac (* 36 j (1+ j)))) :sum curr :of-type (integer 0 *))) (defun bf-possi-for (n) (format t "Length: ~D Possible BF Programs: ~D~%" n (bf-possi n))) ;;; Calculate all possible BF programs up to /top-n/ (defun bf-possi-to (top-n) (loop :for n :from 1 :to top-n :do (bf-possi-for n))) (time (bf-possi-for 1000))