Ants


Gram’s blog has been pretty fun to follow. Like with Project Euler, I constantly want to implement each thing he talks about (e.g. Monadic Coconuts, Towers of Hanoi).


Here now is “The Wondering Ant“:


open System.Drawing


open System.Windows.Forms


 




let rec ant (x, y) (dx, dy) g i =


    let g’ = Array2D.mapi (fun x’ y’ c -> if x = x’ && y = y’ then not c else c) g


    let turn d l r = if d <> 0 then else if g.[x, y] then l else r


    let dx’ = turn dx dy -dy


    let dy’ = turn dy -dx dx


    if i = 0 then g’ else ant (x + dx’, y + dy’) (dx’, dy’) g’ (i – 1)




 


let w = 200


let h = 200


let grid = ant (100, 100) (-1, 0) (Array2D.create w h false) 11000




 


let form = new Form(Text = “Ant”, ClientSize = new Size(w, h), Visible = true)


form.Paint.Add(fun a ->


    let b = new Bitmap(w, h)


    Array2D.iteri (fun x y c -> if c then b.SetPixel(x, y, Color.Black)) grid


    a.Graphics.DrawImage(b, 0, 0))


Application.Run(form)


Ants

Comments (0)