packages feed

fudgets-0.18.3: Demos/life/Generate.hs

module Generate where

import Utils2

generate (bounds,g) = (bounds,newg)
    where (xm,ym) = bounds
	  wrap u m = (u+m) `mod` m
	  newg = (cond g . foldl insert [] . reverse) [(wrap u xm, wrap v ym) | (x,y) <- g, u <- [x-1..x+1], v <- [y-1..y+1]]
	  insert (pn@(p1,n):l) p | p == p1 = (p1,n+1):l
				 | p > p1  = pn : insert l p
	  insert l p = (p,1) : l
	  cond l ((p,n):nbs) = if not lived && n == 3 || lived && (n == 3 || n == 4) then p : rest else rest
			       where (l',lived) = mapgen (\l->(l,True)) (flip const) (\l->(l,False)) p l
				     rest = cond l' nbs 
	  cond _ [] = []