Created
May 4, 2023 19:17
-
-
Save davidgrenier/2fd7e735510889c86863bc098f1ea194 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#I "../hopac/Libs/Hopac/bin/Release/net7.0/" | |
#r "Hopac.Core" | |
#r "Hopac.Platform" | |
#r "Hopac" | |
#load "./Bench.fs" | |
open System | |
open System.Threading | |
open Hopac.Extensions | |
open Hopac.Infixes | |
open Hopac | |
let rnd = Random() | |
let m,n = Console.BufferHeight-4, Console.BufferWidth-1 | |
let scene = Job.thunk <| fun () -> | |
let scene = Array.init (m+2) (fun _ -> Array.init (n+2) (fun _ -> rnd.Next() % 2)) | |
for i = 0 to m+1 do | |
scene[i][0] <- 0 | |
scene[i][n+1] <- 0 | |
for j = 0 to n+1 do | |
scene[0][j] <- 0 | |
scene[m+1][j] <- 0 | |
scene | |
let N = 15 | |
let sleep = timeOutMillis (1000/N) | |
let lifeIter scene = Job.delay <| fun () -> | |
let before = Array.map Array.copy scene | |
seq {1..m} | |
|> Seq.Con.iterJob (fun i -> | |
seq {1..n} | |
|> Seq.Con.iterJob (fun j -> | |
Job.thunk <| fun () -> | |
let count = | |
before[i-1][j-1] + before[i-1][j] + before[i-1][j+1] | |
+ before[i][j-1] + before[i][j+1] | |
+ before[i+1][j-1] + before[i+1][j] + before[i+1][j+1] | |
scene[i][j] <- | |
match count, before[i][j] with | |
| 3, _ | 2, 1 -> 1 | |
| _ -> 0 | |
) | |
) | |
let show c (scene : int[][]) = | |
let symb = [|' '; c|] | |
Job.thunk <| fun () -> | |
Console.Clear() | |
[| | |
for i = 1 to m do | |
for j = 1 to n do | |
symb[scene[i][j]] | |
'\n' | |
|] | |
|> String | |
|> printfn "%s" | |
scene | |
run scene |> show '\u25A0' >>= lifeIter >>=. sleep | |
|> Job.forN 300 | |
|> run |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment