とりあえず
あなごるからどう考えても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字。長いし遅いとか救いがないな。
配列とか点対称出力使わずにもう少し速くする方法何かないかな。