namespace Life open Pit open Pit.Dom module App = let [] generate size grid = grid |> Array.mapi (fun i value -> /// Neighbours count let count = let s = size [-1-s;-s;1-s; -1; 1; -1+s;s; 1+s] |> Seq.sumBy(fun o -> let offset = abs((i + o) % grid.Length) grid.[offset] ) // Evaluate life match value, count with | _, 3 -> 1 | n, 2 -> n | _, _ -> 0 ) let [] toString (size:int) (grid:int[]) = let mutable text = "" for y=0 to (grid.Length/size)-1 do for x = 0 to size-1 do let s = grid.[y * size + x].ToString() text <- text + s text <- text + "
" text let [] grid = [| 0;0;0;0;0;0;0;0;0;0 0;0;0;0;0;0;0;0;0;0 0;0;0;0;0;0;0;0;0;0 0;0;0;0;0;1;0;0;0;0 0;0;0;0;0;1;1;0;0;0 0;0;0;0;0;1;0;0;0;0 0;0;0;0;0;0;0;0;0;0 0;0;0;0;0;0;0;0;0;0 0;0;0;0;0;0;0;0;0;0 0;0;0;0;0;0;0;0;0;0 |] let [] size = 10 let [] show (grid:int[]) = let div = document.GetElementById "game" div.InnerHTML <- toString size grid let rec [] update (show:int[]->unit) (grid:int[]) = window.SetTimeout((fun () -> let grid = generate size grid show grid update show grid), 500 ) |> ignore [] [] let main() = show grid update show grid