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

とりあえず

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