Skip to content

Instantly share code, notes, and snippets.

@einarwh
Created February 10, 2015 22:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save einarwh/2de01c1feac7d5c651f8 to your computer and use it in GitHub Desktop.
Save einarwh/2de01c1feac7d5c651f8 to your computer and use it in GitHub Desktop.
The diamond kata using mirroring.
open System
let genLists lst =
[ for e in lst do yield List.map (fun x -> if x = e then x else '.') lst ]
let mirror lst =
match lst with
| [] -> []
| h::t -> List.rev t @ lst
let diamond letters =
letters |> genLists
|> List.map (fun a -> mirror a)
|> List.rev
|> mirror
let toStr d =
d |> List.map (fun a -> new string(Array.ofList(a)))
|> String.concat "\n"
['A' .. 'Z'] |> diamond |> toStr |> printfn "%s"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment