solve-1.1: Solving simple games

LicenseMIT
MaintainerJoe Leslie-Hurd <joe@gilith.com>
Stabilityprovisional
Portabilityportable
Safe HaskellSafe
LanguageHaskell98

Solve.Game

Description

 

Documentation

data Player Source #

Constructors

Player1 
Player2 
Instances
Eq Player Source # 
Instance details

Defined in Solve.Game

Methods

(==) :: Player -> Player -> Bool #

(/=) :: Player -> Player -> Bool #

Ord Player Source # 
Instance details

Defined in Solve.Game

Show Player Source # 
Instance details

Defined in Solve.Game

newtype PlayerState s Source #

Constructors

PlayerState (s, s) 

updatePlayerState :: (s -> (a, s)) -> PlayerState s -> Player -> (a, PlayerState s) Source #

data Eval Source #

Constructors

Win Player Int 
Draw 
Instances
Eq Eval Source # 
Instance details

Defined in Solve.Game

Methods

(==) :: Eval -> Eval -> Bool #

(/=) :: Eval -> Eval -> Bool #

Ord Eval Source # 
Instance details

Defined in Solve.Game

Methods

compare :: Eval -> Eval -> Ordering #

(<) :: Eval -> Eval -> Bool #

(<=) :: Eval -> Eval -> Bool #

(>) :: Eval -> Eval -> Bool #

(>=) :: Eval -> Eval -> Bool #

max :: Eval -> Eval -> Eval #

min :: Eval -> Eval -> Eval #

Show Eval Source # 
Instance details

Defined in Solve.Game

Methods

showsPrec :: Int -> Eval -> ShowS #

show :: Eval -> String #

showList :: [Eval] -> ShowS #

better :: Ord a => Player -> a -> a -> Bool Source #

best :: Ord a => Player -> [a] -> a Source #

type Game p = Player -> p -> Either Eval [p] Source #

move :: Game p -> Player -> p -> [p] Source #

type DfsPre p a v = Player -> DfsPre p a v Source #

type DfsPost p a v = Player -> DfsPost p a v Source #

type Val p v = DfsResult (Player, p) v Source #

dfsWith :: Ord p => DfsPre p a v -> DfsPost p a v -> Val p v -> Player -> p -> (v, Val p v) Source #

eval :: Ord p => Val p v -> Player -> p -> Maybe v Source #

evalUnsafe :: Ord p => Val p v -> Player -> p -> v Source #

type Solve p = Val p Eval Source #

solveWith :: Ord p => Game p -> Solve p -> Player -> p -> (Eval, Solve p) Source #

solve :: Ord p => Game p -> Player -> p -> Solve p Source #

data Force Source #

Constructors

ForceIn Int 
ForceNever 
Instances
Eq Force Source # 
Instance details

Defined in Solve.Game

Methods

(==) :: Force -> Force -> Bool #

(/=) :: Force -> Force -> Bool #

Ord Force Source # 
Instance details

Defined in Solve.Game

Methods

compare :: Force -> Force -> Ordering #

(<) :: Force -> Force -> Bool #

(<=) :: Force -> Force -> Bool #

(>) :: Force -> Force -> Bool #

(>=) :: Force -> Force -> Bool #

max :: Force -> Force -> Force #

min :: Force -> Force -> Force #

Show Force Source # 
Instance details

Defined in Solve.Game

Methods

showsPrec :: Int -> Force -> ShowS #

show :: Force -> String #

showList :: [Force] -> ShowS #

type Forced p = Val p Force Source #

bestForce :: Ord a => Player -> Player -> [a] -> a Source #

forcedWith :: Ord p => Game p -> Player -> (Player -> p -> Bool) -> Forced p -> Player -> p -> (Force, Forced p) Source #

forced :: Ord p => Game p -> Player -> (Player -> p -> Bool) -> Player -> p -> Forced p Source #

data Max v Source #

Constructors

Max v Int 
Instances
Eq v => Eq (Max v) Source # 
Instance details

Defined in Solve.Game

Methods

(==) :: Max v -> Max v -> Bool #

(/=) :: Max v -> Max v -> Bool #

Ord v => Ord (Max v) Source # 
Instance details

Defined in Solve.Game

Methods

compare :: Max v -> Max v -> Ordering #

(<) :: Max v -> Max v -> Bool #

(<=) :: Max v -> Max v -> Bool #

(>) :: Max v -> Max v -> Bool #

(>=) :: Max v -> Max v -> Bool #

max :: Max v -> Max v -> Max v #

min :: Max v -> Max v -> Max v #

Show v => Show (Max v) Source # 
Instance details

Defined in Solve.Game

Methods

showsPrec :: Int -> Max v -> ShowS #

show :: Max v -> String #

showList :: [Max v] -> ShowS #

gameMaxWith :: (Ord p, Ord v) => Game p -> Player -> (Player -> p -> v) -> Val p (Max v) -> Player -> p -> (Max v, Val p (Max v)) Source #

gameMax :: (Ord p, Ord v) => Game p -> Player -> (Player -> p -> v) -> Player -> p -> Val p (Max v) Source #

type Strategy p = [(Weight, p)] -> [(Weight, p)] Source #

moveDistStrategy :: Eq p => Game p -> Strategy p -> Player -> p -> [(Prob, p)] Source #

distStrategy :: Eq p => Strategy p -> [p] -> [(Prob, p)] Source #

applyStrategy :: Strategy p -> [p] -> [(Weight, p)] Source #

maxStrategy :: Ord v => (p -> v) -> Strategy p Source #

type StrategyFail p = Set ((Eval, p), (Eval, p), (Eval, p)) Source #

validateStrategy :: Ord p => Game p -> Solve p -> Player -> Strategy p -> Player -> p -> StrategyFail p Source #

type ProbWin p = Val p Prob Source #

probWinWith :: Ord p => Game p -> Player -> Strategy p -> ProbWin p -> Player -> p -> (Prob, ProbWin p) Source #

probWin :: Ord p => Game p -> Player -> Strategy p -> Player -> p -> ProbWin p Source #

moveDist :: Ord p => Game p -> Solve p -> Adversaries p -> Player -> p -> ([(Prob, p)], Adversaries p) Source #