import qualified Board import qualified Pack import Array import IO import System import Random usage = putStrLn "Usage: needs " main = do args <- getArgs case args of m:n:w:_ -> do let num = read n :: Int maxW = read w :: Integer Just board <- Board.load m let bases = Board.homeBases board packs <- let ?num = num ?maxW = maxW ?board = board in sequence (zipWith genPacksAt bases [1,num+1..]) print (bases `zip` packs) _ -> usage genPacksAt p uid = sequence (zipWith genPackAt (repeat p) [uid .. uid + ?num - 1]) genPackAt p uid = do w <- randomRIO (1,?maxW) d <- dest ?board return $ Pack.Mk { Pack.uid = uid , Pack.weight = w , Pack.dest = d } dest b = do pos <- randomRIO (bounds b) :: IO Board.Pos if b `Board.tileAt` pos == Board.Normal then return pos else dest b