open System
open System.IO
let rules =
[('a',['b';'c'])
('b',['a'])
('c',['a';'a';'a'])]
let getRule (character : char) =
let picked =
rules
|> List.find (fun x -> fst x = character)
|> snd
picked
let rec transform (current : char List) =
let str =
current
|> Array.ofList
|> String.Concat
printfn "%s" str
if current.Length = 1 then
current
else
let newIter = current.Item(0)
|> getRule
|> List.append current.Tail.Tail
transform newIter
[<EntryPoint>]
let main argv =
let stringExplode (s:string) =
[for c in s -> c]
"aaa"
|> stringExplode
|> transform
|> ignore
"aaaaaaa"
|> stringExplode
|> transform
|> ignore
0 // return an integer exit code
b3BlbiBTeXN0ZW0Kb3BlbiBTeXN0ZW0uSU8KCmxldCBydWxlcyA9IAogICAgWygnYScsWydiJzsnYyddKQogICAgICgnYicsWydhJ10pCiAgICAgKCdjJyxbJ2EnOydhJzsnYSddKV0KCmxldCBnZXRSdWxlIChjaGFyYWN0ZXIgOiBjaGFyKSA9CiAgICBsZXQgcGlja2VkID0gCiAgICAgICAgcnVsZXMgCiAgICAgICAgfD4gTGlzdC5maW5kIChmdW4geCAtPiBmc3QgeCA9IGNoYXJhY3RlcikKICAgICAgICB8PiBzbmQKICAgIHBpY2tlZApsZXQgcmVjIHRyYW5zZm9ybSAoY3VycmVudCA6IGNoYXIgTGlzdCkgPQogICAgbGV0IHN0ciA9IAogICAgICAgIGN1cnJlbnQKICAgICAgICB8PiBBcnJheS5vZkxpc3QKICAgICAgICB8PiBTdHJpbmcuQ29uY2F0CiAgICBwcmludGZuICIlcyIgc3RyCgogICAgaWYgY3VycmVudC5MZW5ndGggPSAxIHRoZW4KICAgICAgICBjdXJyZW50CiAgICBlbHNlCiAgICAgICAgbGV0IG5ld0l0ZXIgPSBjdXJyZW50Lkl0ZW0oMCkgCiAgICAgICAgICAgICAgICAgICAgIHw+IGdldFJ1bGUKICAgICAgICAgICAgICAgICAgICAgfD4gTGlzdC5hcHBlbmQgY3VycmVudC5UYWlsLlRhaWwKICAgICAgICB0cmFuc2Zvcm0gbmV3SXRlcgoKCls8RW50cnlQb2ludD5dCmxldCBtYWluIGFyZ3YgPQogICAgbGV0IHN0cmluZ0V4cGxvZGUgKHM6c3RyaW5nKSA9IAogICAgICAgIFtmb3IgYyBpbiBzIC0+IGNdCiAgICAKICAgICJhYWEiCiAgICB8PiBzdHJpbmdFeHBsb2RlCiAgICB8PiB0cmFuc2Zvcm0KICAgIHw+IGlnbm9yZQoKICAgICJhYWFhYWFhIgogICAgfD4gc3RyaW5nRXhwbG9kZQogICAgfD4gdHJhbnNmb3JtCiAgICB8PiBpZ25vcmUKCiAgICAwIC8vIHJldHVybiBhbiBpbnRlZ2VyIGV4aXQgY29kZQ==