GrassでLLGolf Hole 8 準備

(load "grass-primitive.l")
(defun % (&rest arg)
  (reduce #'funcall arg))

(defun $ (&rest arg)
  (reduce #'funcall arg :from-end t))

(defvar y
  (lambda (f)
    ($ (lambda (g)
         ($ f (lambda (x) (% g g x))))
       (lambda (g)
         ($ f (lambda (x) (% g g x)))))))


(defun llgolf8 ()
  (let*
      ((plant
        (lambda (_lf)
          (lambda (_cn)
            (lambda (self)
              (lambda (_ci)
                (let ((eq? (% _cn _ci)))
                  (% out (% eq? _lf w))
                  (% eq? eq? self (% succ _ci))))))))
       (main
        (lambda (_c1)
          (lambda (_cn)
            (lambda (_plant)
              (lambda (self)
                (lambda (_ci)
                  (let* ((eq? (% _cn _ci))
                         (ci+1 (% succ _ci))
                         (__plant ($ y _plant ci+1)))
                    (% __plant _c1)
                    (% eq? eq? self ci+1)
                    (% eq? eq? __plant _c1))))))))
       (c1 (charfn (char-code #\1)))
       (lf (charfn (char-code #\NewLine)))
       (cn (% in w)))
    (% y (% main c1 cn (% plant lf)) c1)))

実行

* (llgolf8)
4
w
ww
www
wwww
www
ww
w
#<CLOSURE (LAMBDA (Y)) {23B622E5}>

二桁の数値は受け付けません。(というか2桁目以降無視) 記号やアルファベットを入力すると大きいピラミッドが。

plantとmainは直訳できる形だからあとは1とLFさえ作ってしまえば。EmacsのGrassモードの力を借りながら新幹線の中で植えて行くか。間に合うかな…