{-# LANGUAGE DeriveGeneric #-}
|
|
module Main where
|
|
|
|
import GHC.Generics
|
|
import Data.Aeson
|
|
import Data.Aeson.Types
|
|
|
|
import Data.Maybe
|
|
import System.Environment
|
|
import qualified Data.ByteString.Lazy.Char8 as BS
|
|
import System.IO
|
|
import qualified Datatypes as DT
|
|
import qualified VM
|
|
import Opt
|
|
import JSONDeser
|
|
import SinglePasses
|
|
import PowerPhrases
|
|
|
|
main :: IO ()
|
|
main = do args <- getArgs
|
|
opt <- parseArgs args
|
|
filename <- return ((optFile opt) !! 0)
|
|
file <- BS.readFile filename
|
|
phrase <- return (fromJust $ optPowerPhrase opt)
|
|
seedn <- return $ optSeedNumber opt
|
|
(id, seedgame) <- return $ readInput file
|
|
(seed,game) <- return $ unzip seedgame
|
|
outputs <- return $ passes $ propagateCommand (game !! seedn) phrase
|
|
BS.putStrLn $ encode outputs
|
|
|
|
propagateCommand :: DT.Game -> String -> [(DT.Game, VM.Notes)]
|
|
propagateCommand game str = (game,VM.OK):(propagateCommand0 game str)
|
|
where
|
|
propagateCommand0 game0 [] = []
|
|
propagateCommand0 game0 (c:cs) = res1:(propagateCommand0 game1 cs)
|
|
where
|
|
res1@(game1,note1) = VM.step game0 (fromJust $ charToCommand c)
|
|
|
|
|