Skip to content

Instantly share code, notes, and snippets.

@jneira
Created April 24, 2012 07:56
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 jneira/2477668 to your computer and use it in GitHub Desktop.
Save jneira/2477668 to your computer and use it in GitHub Desktop.
module RandTree where
import Data.Tree
import System.Random
range=(0,2)
probChild:: StdGen -> [Int]
probChild g=randomRs range g
maxChilds=2
generator :: StdGen -> ([Int],[StdGen])
generator seed=
let rs=take maxChilds $ probChild seed
s=length $ filter (>0) rs
childs=replicate s (snd.next $ seed)
in (rs,childs)
genTree=unfoldTree generator
count=length.flatten
main= newStdGen >>= return.count.genTree
@jneira
Copy link
Author

jneira commented Apr 24, 2012

from Data.Tree
flatten :: Tree a -> [a]
flatten t = squish t []
where squish (Node x ts) xs = x:Prelude.foldr squish xs ts

@jneira
Copy link
Author

jneira commented Apr 24, 2012

*RandTree> :main
3677535
(one minute)

@jneira
Copy link
Author

jneira commented Apr 24, 2012

*RandTree> :main
12714851

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment