読者です 読者をやめる 読者になる 読者になる

LLGolf Hole 8

doukaku.org
最初に書いたコード。

(do*((e(read))(i(- e)(1+ i)))((= i e))(dotimes(j(- e(abs i)))(princ"*"))(princ #\NewLine))

微妙だなあと思って投稿しないでいたらformatを使った回答が。

;mc    #7421(2008-08-27 19:25) [ Common Lisp ]  
(format t "~{~,,V,'*A~%~}"
    (do ((i 1 (1+ i))
         (r () `("" ,i ,@r))
         (a () `(,i "" ,@a)))
        ((< 4 i) `(,@(nreverse r) ,@(cddr a)))))

なにこれ知らない、というかxyzzyのリファレンスにも実践CommonLispにも載ってない(見落としてるだけ?)

書き直し

(do*((e(read))(i(- e)(1+ i)))((= i e))(format t"~,,V,'*A~%"(- e(abs i))""))

結果

CL-USER> (do*((e(read))(i(- e)(1+ i)))((= i e))(format t"~,,V,'*A~%"(- e(abs i))""))
6

*
**
***
****
*****
******
*****
****
***
**
*
NIL

xyzzyでも動いた。
,,Vの部分が第1引数に置き換わるってことで良いのかな? 調べておこう。

*

formatの章のむっちゃ最初の方に書いてあった…orz