import System. Random
import Control
. Monad . State
import Control. Applicative
monteCarlo :: ( Random a, RandomGen g)
where rands
= take count
( randomRs reg gen
)
instance ( Random a, Random b, Random c) => Random ( a, b, c) where
random = runState ( liftA3 ( ,, ) ( state random) ( state random) ( state random) )
randomR ( ( x1, y1, z1) , ( x2, y2, z2) ) gen1 =
let ( x, gen2) = randomR ( x1, x2) gen1
( y, gen3) = randomR ( y1, y2) gen2
( z, gen4) = randomR ( z1, z2) gen3
in ( ( x, y, z) , gen4)
main = do
gen <- getStdGen
print ( monteCarlo
10000 ( ( 0.0 , 0.0 , 0.0 ) , ( 1.0 , 1.0 , 1.0 ) ) isTriangle gen
) isTriangle ( x, y, z) = x+ y> z && y+ z> x && z+ x> y
aW1wb3J0IFN5c3RlbS5SYW5kb20KaW1wb3J0IENvbnRyb2wuTW9uYWQuU3RhdGUKaW1wb3J0IENvbnRyb2wuQXBwbGljYXRpdmUKCm1vbnRlQ2FybG8gOjogKFJhbmRvbSBhLCBSYW5kb21HZW4gZykKICAgICAgICAgICA9PiBJbnQgLT4gKGEsYSkgLT4gKGEgLT4gQm9vbCkgLT4gZyAtPiBEb3VibGUKbW9udGVDYXJsbyBjb3VudCByZWcgY29uZCBnZW4gPSBmcm9tSW50ZWdyYWwgaGl0cyAvIGZyb21JbnRlZ3JhbCBjb3VudAogIHdoZXJlIHJhbmRzID0gdGFrZSBjb3VudCAocmFuZG9tUnMgcmVnIGdlbikKICAgICAgICBoaXRzICA9IGxlbmd0aCAoZmlsdGVyIGNvbmQgcmFuZHMpCgoKaW5zdGFuY2UgKFJhbmRvbSBhLCBSYW5kb20gYiwgUmFuZG9tIGMpID0+IFJhbmRvbSAoYSxiLGMpIHdoZXJlCiAgcmFuZG9tID0gcnVuU3RhdGUgKGxpZnRBMyAoLCwpIChzdGF0ZSByYW5kb20pIChzdGF0ZSByYW5kb20pIChzdGF0ZSByYW5kb20pKQogIHJhbmRvbVIgKCh4MSx5MSx6MSksICh4Mix5Mix6MikpIGdlbjEgPQogICAgbGV0ICh4LCBnZW4yKSA9IHJhbmRvbVIgKHgxLCB4MikgZ2VuMQogICAgICAgICh5LCBnZW4zKSA9IHJhbmRvbVIgKHkxLCB5MikgZ2VuMgogICAgICAgICh6LCBnZW40KSA9IHJhbmRvbVIgKHoxLCB6MikgZ2VuMwogICAgaW4gKCh4LHkseiksIGdlbjQpCgptYWluID0gZG8KICBnZW4gPC0gZ2V0U3RkR2VuCiAgcHJpbnQgKG1vbnRlQ2FybG8gMTAwMDAgKCgwLjAsMC4wLDAuMCksKDEuMCwxLjAsMS4wKSkgaXNUcmlhbmdsZSBnZW4pCiAgd2hlcmUgaXNUcmlhbmdsZSA6OiAoRG91YmxlLERvdWJsZSxEb3VibGUpIC0+IEJvb2wKICAgICAgICBpc1RyaWFuZ2xlICh4LHkseikgPSB4K3k+eiAmJiB5K3o+eCAmJiB6K3g+eQo=