Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Richard P. Lohse, Four Similar Groups
- let design = "! | ! ! ! !
- @*+-@*@*+-@*
- | | | ! | |
- @-+-+-+-+-+*
- ! | | | | !
- @*@-+-+-+*@*
- ! ! | | | !
- @*+-+-+-+-@*
- ! | | | | |
- +-+-+*@-+-+-
- ! | ! ! | !
- @*+*@*@*@+@+"
- let lines = design.Split([|'\n'|])
- let toName = function
- | '@' -> "Red"
- | '*' -> "Blue"
- | '!' -> "Pink"
- | '|' -> "LightPink"
- | '+' -> "White"
- | '-' -> "Grey"
- | _ -> "Black"
- let toColor = function
- | "Red" -> 190, 28, 0
- | "Blue" -> 41, 68, 176
- | "Pink" -> 201, 102, 165
- | "LightPink" -> 221, 199, 218
- | "White" -> 238, 234, 247
- | "Grey" -> 205, 205, 232
- | "Black" -> 7, 11, 18
- | _ -> invalidOp ""
- #r "System.Drawing.dll"
- open System
- open System.Drawing
- let toBrush c =
- c |> toName |> toColor |> fun (r,g,b) -> new SolidBrush(Color.FromArgb(255,r,g,b))
- let draw (lines:string[]) =
- let w,h = 40, 40
- let image = new Bitmap(11*40, 12*40)
- use graphics = Graphics.FromImage(image)
- graphics.FillRectangle(toBrush ' ', 0, 0, 800, 800)
- lines |> Seq.iteri (fun y line ->
- line |> Seq.iteri (fun x c ->
- let brush = toBrush c
- graphics.FillRectangle(brush, x*w, y*h, w, h)
- )
- )
- image
- #r @"Gif.Components.dll"
- open Gif.Components
- let encoder = AnimatedGifEncoder()
- if encoder.Start(@"c:\temp\Four Similar Groups.gif") then
- encoder.SetFrameRate(10.0f)
- encoder.SetRepeat(0)
- let deltas = [
- []
- [4,1, '+'; 4,2, '@']
- [4,1, '+'; 4,3, '@']
- [4,1, '+'; 4,4, '@']
- [4,1, '+'; 4,5, '@']
- [4,1, '+'; 4,6, '@']
- [4,1, '+'; 4,7, '@']
- [4,1, '+'; 4,8, '@']
- [4,1, '+'; 4,9, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,8, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,7, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,6, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,5, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,4, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 3,5, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 4,5, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 5,5, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 6,5, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 7,5, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 9,7, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 8,7, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 7,7, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 6,7, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 5,7, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 4,7, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 3,7, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [4,1, '+'; 4,9, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [4,1, '+'; 4,8, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [4,1, '+'; 4,7, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [4,1, '+'; 4,6, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [4,1, '+'; 4,5, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [4,1, '+'; 4,4, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [4,1, '+'; 4,3, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [4,1, '+'; 4,2, '@'; 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [ 6,9, '+'; 6,3, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [ 6,9, '+'; 6,4, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [ 6,9, '+'; 6,5, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [ 6,9, '+'; 6,6, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [ 6,9, '+'; 6,7, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [ 6,9, '+'; 6,8, '@'; 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [ 2,5, '+'; 8,5, '@'; 10,7, '+'; 2,7, '@']
- [ 2,5, '+'; 7,5, '@'; 10,7, '+'; 2,7, '@']
- [ 2,5, '+'; 6,5, '@'; 10,7, '+'; 2,7, '@']
- [ 2,5, '+'; 5,5, '@'; 10,7, '+'; 2,7, '@']
- [ 2,5, '+'; 4,5, '@'; 10,7, '+'; 2,7, '@']
- [ 2,5, '+'; 3,5, '@'; 10,7, '+'; 2,7, '@']
- [ 10,7, '+'; 2,7, '@']
- [ 10,7, '+'; 3,7, '@']
- [ 10,7, '+'; 4,7, '@']
- [ 10,7, '+'; 5,7, '@']
- [ 10,7, '+'; 6,7, '@']
- [ 10,7, '+'; 7,7, '@']
- [ 10,7, '+'; 8,7, '@']
- [ 10,7, '+'; 9,7, '@']
- []
- ]
- deltas |> List.iter (fun xs ->
- let ys = lines |> Array.map (fun line -> line.ToCharArray())
- for x,y,c in xs do
- ys.[y].[x] <- c
- let lines = ys |> Array.map (fun chars -> String(chars))
- encoder.AddFrame(draw lines) |> ignore
- )
- encoder.Finish() |> ignore
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement