module Solutions.Core19_9 where
import Dovin.V1
import Dovin.Prelude
spellCount :: [Char]
spellCount = [Char]
"spell-count"
castWithTriggers :: [Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
castWithTriggers [Char]
cost [Char]
name = do
ASetter Board Board Int Int
-> (Int -> Int)
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> (a -> b) -> m ()
modifying
((HashMap [Char] Int -> Identity (HashMap [Char] Int))
-> Board -> Identity Board
Lens' Board (HashMap [Char] Int)
counters ((HashMap [Char] Int -> Identity (HashMap [Char] Int))
-> Board -> Identity Board)
-> ((Int -> Identity Int)
-> HashMap [Char] Int -> Identity (HashMap [Char] Int))
-> ASetter Board Board Int Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Index (HashMap [Char] Int)
-> Lens'
(HashMap [Char] Int) (Maybe (IxValue (HashMap [Char] Int)))
forall m. At m => Index m -> Lens' m (Maybe (IxValue m))
at [Char]
Index (HashMap [Char] Int)
spellCount ((Maybe Int -> Identity (Maybe Int))
-> HashMap [Char] Int -> Identity (HashMap [Char] Int))
-> ((Int -> Identity Int) -> Maybe Int -> Identity (Maybe Int))
-> (Int -> Identity Int)
-> HashMap [Char] Int
-> Identity (HashMap [Char] Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Iso' (Maybe Int) Int
forall a. Eq a => a -> Iso' (Maybe a) a
non Int
0)
(Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
CardMatcher
-> ([Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forCards
(CardMatcher
matchInPlay CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> [Char] -> CardMatcher
matchName [Char]
"Aetherflux Reservoir")
(([Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ([Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. a -> b -> a
const (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
trigger [Char]
"Aetherflux Reservoir"
Int
x <- Getting Int Board Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
forall s (m :: * -> *) a. MonadState s m => Getting a s a -> m a
use (Getting Int Board Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int)
-> Getting Int Board Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
forall a b. (a -> b) -> a -> b
$ (HashMap [Char] Int -> Const Int (HashMap [Char] Int))
-> Board -> Const Int Board
Lens' Board (HashMap [Char] Int)
counters ((HashMap [Char] Int -> Const Int (HashMap [Char] Int))
-> Board -> Const Int Board)
-> ((Int -> Const Int Int)
-> HashMap [Char] Int -> Const Int (HashMap [Char] Int))
-> Getting Int Board Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Index (HashMap [Char] Int)
-> Lens'
(HashMap [Char] Int) (Maybe (IxValue (HashMap [Char] Int)))
forall m. At m => Index m -> Lens' m (Maybe (IxValue m))
at [Char]
Index (HashMap [Char] Int)
spellCount ((Maybe Int -> Const Int (Maybe Int))
-> HashMap [Char] Int -> Const Int (HashMap [Char] Int))
-> ((Int -> Const Int Int) -> Maybe Int -> Const Int (Maybe Int))
-> (Int -> Const Int Int)
-> HashMap [Char] Int
-> Const Int (HashMap [Char] Int)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Iso' (Maybe Int) Int
forall a. Eq a => a -> Iso' (Maybe a) a
non Int
0
Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
gainLife Int
x
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
cast [Char]
cost [Char]
name
solution :: GameMonad ()
solution :: ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
solution = do
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Initial state" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
Player
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
as Player
Opponent (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
setLife Int
50
Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
setLife Int
1
CardLocation
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
withLocation (Player
Active, Location
Play) (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
Int
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addLands Int
3 [Char]
"Spirebluff Canal"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addArtifact [Char]
"Cultivator's Caravan"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addArtifact [Char]
"Powerstone Shard 1"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addArtifact [Char]
"Powerstone Shard 2"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addArtifact [Char]
"Mox Amber 1"
(Int, Int)
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addCreature (Int
2, Int
2) [Char]
"Captain Lannery Storm"
CardLocation
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
withLocation (Player
Active, Location
Hand) (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addArtifact [Char]
"Aetherflux Reservoir"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addArtifact [Char]
"Mox Amber 2"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addInstant [Char]
"Paradoxical Outcome"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addArtifact [Char]
"Foundry Inspector"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addInstant [Char]
"Abrade"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Attack with Captain to get a Treasure, assume he's blocked and destroyed" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[[Char]]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
attackWith [[Char]
"Captain Lannery Storm"]
CardLocation
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
withLocation (Player
Active, Location
Play) (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
withAttribute [Char]
token (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
addArtifact [Char]
"Treasure"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
destroy [Char]
"Captain Lannery Storm"
Phase
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
transitionTo Phase
SecondMain
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Cast Foundry Inspector, reducing cost of future artifacts" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"1" [Char]
"Treasure"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
sacrifice [Char]
"Treasure"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"U" [Char]
"Spirebluff Canal 1"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"U" [Char]
"Spirebluff Canal 2"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
castWithTriggers [Char]
"3" [Char]
"Foundry Inspector" ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
resolveTop
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Cast Aetherflux Reservoir" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"2" [Char]
"Powerstone Shard 1"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"U" [Char]
"Spirebluff Canal 3"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
castWithTriggers [Char]
"3" [Char]
"Aetherflux Reservoir" ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
resolveTop
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Cast Mox Amber" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
castWithTriggers [Char]
"" [Char]
"Mox Amber 2" ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
resolveTop
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Tap Cultivator's Caravan, leave mana floating" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"U" [Char]
"Cultivator's Caravan"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Cast Paradoxical Outcome for all artifacts and a tapped land" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"2" [Char]
"Powerstone Shard 2"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"U" [Char]
"Mox Amber 1"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"U" [Char]
"Mox Amber 2"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
castWithTriggers [Char]
"3U" [Char]
"Paradoxical Outcome" ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
resolveTop
Location
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
moveTo Location
Hand [Char]
"Spirebluff Canal 1"
Location
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
moveTo Location
Hand [Char]
"Powerstone Shard 1"
Location
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
moveTo Location
Hand [Char]
"Powerstone Shard 2"
Location
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
moveTo Location
Hand [Char]
"Mox Amber 1"
Location
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
moveTo Location
Hand [Char]
"Mox Amber 2"
Location
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
moveTo Location
Hand [Char]
"Cultivator's Caravan"
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Replay land and moxes" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
Location
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
moveTo Location
Play [Char]
"Spirebluff Canal 1"
[Int]
-> (Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [Int
1..Int
2] ((Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> (Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ \Int
n -> do
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
castWithTriggers [Char]
"" (Int -> [Char] -> [Char]
numbered Int
n [Char]
"Mox Amber") ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
resolveTop
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Replay Powerstone Shard 1 with moxes" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"1" [Char]
"Mox Amber 1"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"1" [Char]
"Mox Amber 2"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
castWithTriggers [Char]
"2" [Char]
"Powerstone Shard 1" ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
resolveTop
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Replay Powerstone Shard 2 with floating mana and land" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"U" [Char]
"Spirebluff Canal 1"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
castWithTriggers [Char]
"2" [Char]
"Powerstone Shard 2" ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
resolveTop
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Replay Caravan" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"2" [Char]
"Powerstone Shard 1"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
castWithTriggers [Char]
"2" [Char]
"Cultivator's Caravan" ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
resolveTop
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Cast Abrade, target doesn't matter" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"R" [Char]
"Cultivator's Caravan"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
tapForMana [Char]
"2" [Char]
"Powerstone Shard 2"
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
castWithTriggers [Char]
"1R" [Char]
"Abrade" ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
resolveTop
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a. [Char] -> GameMonad a -> GameMonad a
step [Char]
"Activate Aetherflux Reservoir, targeting opponent" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
activate [Char]
"" [Char]
"Aetherflux Reservoir"
Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
loseLife Int
50
(Card -> Int)
-> Target
-> [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
damage (Int -> Card -> Int
forall a b. a -> b -> a
const Int
50) (Player -> Target
targetPlayer Player
Opponent) [Char]
"Aetherflux Reservoir"
Player
-> Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) ()
validateLife Player
Opponent Int
0
matchPowerstones :: CardMatcher
matchPowerstones = [Char] -> CardMatcher
matchName [Char]
"Powerstone Shard 1"
CardMatcher -> CardMatcher -> CardMatcher
`matchOr` [Char] -> CardMatcher
matchName [Char]
"Powerstone Shard 2"
CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> CardMatcher
matchInPlay
CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> Player -> CardMatcher
matchController Player
Active
matchArtifactMana :: CardMatcher
matchArtifactMana = [Char] -> CardMatcher
matchName [Char]
"Mox Amber 1"
CardMatcher -> CardMatcher -> CardMatcher
`matchOr` [Char] -> CardMatcher
matchName [Char]
"Mox Amber 2"
CardMatcher -> CardMatcher -> CardMatcher
`matchOr` [Char] -> CardMatcher
matchName [Char]
"Cultivator's Caravan"
CardMatcher -> CardMatcher -> CardMatcher
`matchOr` [Char] -> CardMatcher
matchName [Char]
"Treasure"
attributes :: Formatter
attributes = FormatMonad () -> Formatter
attributeFormatter (FormatMonad () -> Formatter) -> FormatMonad () -> Formatter
forall a b. (a -> b) -> a -> b
$ do
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ()
forall a. Show a => [Char] -> GameMonad a -> FormatMonad ()
attribute [Char]
"our life" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ()
forall a b. (a -> b) -> a -> b
$ Player
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
countLife Player
Active
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ()
forall a. Show a => [Char] -> GameMonad a -> FormatMonad ()
attribute [Char]
"op. life" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ()
forall a b. (a -> b) -> a -> b
$ Player
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
countLife Player
Opponent
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ()
forall a. Show a => [Char] -> GameMonad a -> FormatMonad ()
attribute [Char]
"spells" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ()
forall a b. (a -> b) -> a -> b
$ [Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
countValue [Char]
spellCount
[Char]
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ()
forall a. Show a => [Char] -> GameMonad a -> FormatMonad ()
attribute [Char]
"mana" (ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ())
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> FormatMonad ()
forall a b. (a -> b) -> a -> b
$ do
Int
normal <- Int -> Int -> Int
forall a. Num a => a -> a -> a
(+)
(Int -> Int -> Int)
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> ExceptT
[Char]
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
(Int -> Int)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> CardMatcher
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
countCards
( [Char] -> CardMatcher
matchAttribute [Char]
"land"
CardMatcher -> CardMatcher -> CardMatcher
`matchOr` CardMatcher
matchArtifactMana
CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> [Char] -> CardMatcher
missingAttribute [Char]
tapped
CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> CardMatcher
matchInPlay
CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> Player -> CardMatcher
matchController Player
Active
)
ExceptT
[Char]
(ReaderT Env (StateT Board (WriterT [Step] Identity)))
(Int -> Int)
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Player
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
countManaPool Player
Active
Int
powerstones <- CardMatcher
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
countCards CardMatcher
matchPowerstones
Int
untapped <- CardMatcher
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
countCards (CardMatcher
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int)
-> CardMatcher
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
forall a b. (a -> b) -> a -> b
$ CardMatcher
matchPowerstones CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> [Char] -> CardMatcher
missingAttribute [Char]
tapped
Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
forall (m :: * -> *) a. Monad m => a -> m a
return (Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int)
-> Int
-> ExceptT
[Char] (ReaderT Env (StateT Board (WriterT [Step] Identity))) Int
forall a b. (a -> b) -> a -> b
$ Int
normal Int -> Int -> Int
forall a. Num a => a -> a -> a
+ (Int
powerstones Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
untapped)
manaSources :: Formatter
manaSources = [Char] -> CardMatcher -> Formatter
cardFormatter
[Char]
"open mana sources"
( [Char] -> CardMatcher
matchAttribute [Char]
"land"
CardMatcher -> CardMatcher -> CardMatcher
`matchOr` CardMatcher
matchArtifactMana
CardMatcher -> CardMatcher -> CardMatcher
`matchOr` CardMatcher
matchPowerstones
CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> [Char] -> CardMatcher
missingAttribute [Char]
tapped
CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> CardMatcher
matchInPlay
CardMatcher -> CardMatcher -> CardMatcher
forall a. Semigroup a => a -> a -> a
<> Player -> CardMatcher
matchController Player
Active
)
formatter :: a -> Formatter
formatter a
1 = Formatter
attributes Formatter -> Formatter -> Formatter
forall a. Semigroup a => a -> a -> a
<> Formatter
boardFormatter
formatter a
_ = Formatter
attributes Formatter -> Formatter -> Formatter
forall a. Semigroup a => a -> a -> a
<> Formatter
manaSources