exercise 3
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 29 Dec 2014 09:18:09 +0000 (14:48 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Mon, 29 Dec 2014 09:18:09 +0000 (14:48 +0530)
hw12/Risk.hs

index 965c7c7887e20104d57d52fadb23021d7f7e3c6e..24acbc06232be1d41dbc1e95db52967faefcbc83 100644 (file)
@@ -4,7 +4,7 @@ module Risk where
 
 import Control.Applicative
 import Control.Monad.Random
-import Control.Monad(replicateM, liftM)
+import Control.Monad(replicateM, liftM, foldM)
 import Data.List(sortBy)
 
 ------------------------------------------------------------
@@ -44,3 +44,13 @@ battle (Battlefield {attackers = a, defenders = d}) =
       rolld = replicateM (min d 2) die
   in
     liftA2 (newBattlefield (Battlefield a d)) rolla rolld
+
+-- exercise 3.
+endgame :: Battlefield -> Bool
+endgame (Battlefield {attackers=a, defenders=d}) = d == 0 || a < 2
+
+invade :: Battlefield -> Rand StdGen Battlefield
+-- invade battlefield = foldM (\acc f -> f $ acc) battlefield (repeat battle)
+invade battlefield = battle battlefield >>= \bf ->
+                     if (endgame bf) then return bf
+                     else invade bf