とりあえず
あなごるからどう考えてもtimeoutになるネタ。
Koch Island
c=[" ","/","\\"] t=[[s=[0,0,0,0],s,s,s], [[0,0,0,1],[1,2,0,2],[2,0,2,1],[1,0,0,0]], [[2,1,2,0],[0,0,1,0],[0,1,0,0],[0,2,1,2]]] def(grow)^(m): (m.map^(l): l.foldl([[],[],[],[]])^(a,e):i:=0;a.map^(d):[*d|t[e][i++]] ).concat() def(pr)^(m): $(l,r):=m.car_cdr() say l.foldl("")^(a,x):a+c[x] if(r):pr(r) say l.foldl("")^(a,x):c[x]+a def(draw)^(n): m:=[[1,2]] n.times^(i):m=grow(m) pr(m)
実行
cyan> draw 0 /\ \/ => "\/" cyan> draw 1 /\/\ /\ \ / \ \/ / / \/\ \/\ / / /\ \ / \ \/ \/\/ => " \/\/ " cyan> draw 2 /\/\ /\/\ /\ \ / /\ \ / \ \/ / \ \/ / / \/\/ \/\ /\/\ \/\ / /\ \ / / /\ \ \ \/ / / \ \/ / \/\ \/\ / \/\ \/\ / / / / /\ \ /\ \ / / \ \/ \ \/ \/\ \/\/ / / \/\ /\/\ /\ \ / /\ \ / \ \/ / \ \/ / / \/\/ \/\ \/\ /\/\ / / /\ \ / /\ \ / \ \/ / \ \/ \/\/ \/\ / / /\/\ \/\ /\ \ /\ \ / / \ \/ \ \/ / / / / \/\ \/\ / \/\ \/\ / /\ \ / / /\ \ \ \/ / / \ \/ / \/\ \/\/ \/\ /\/\ / / /\ \ / /\ \ / \ \/ / \ \/ \/\/ \/\/ => " \/\/ \/\/ "
速度的に3が限界。
CLでも書いたんだけど3がtimeout。
(defun grow (m) (mapcan (lambda (l) (apply 'mapcar 'append (sublis '((0 #1=(0 0 0 0) #1# #1# #1#) (1 (0 0 0 1) (1 2 0 2) (2 0 2 1) (1 0 0 0)) (2 (2 1 2 0) (0 0 1 0) (0 1 0 0) (0 2 1 2))) l))) m)) (defun draw (n) (do ((i n) (m '((1 2) (2 1)) (grow m))) ((< (decf i) 0) (format t "~{~{~[ ~;/~;\\~]~}~%~}" m))))
きっちり畳んで236字。長いし遅いとか救いがないな。
配列とか点対称出力使わずにもう少し速くする方法何かないかな。