combinatorial-0.1.1: Count, enumerate, rank and unrank combinatorial objects
Safe HaskellSafe-Inferred
LanguageHaskell98

Combinatorics.Mastermind

Synopsis

Documentation

data Eval Source #

Cf. board-games package.

Constructors

Eval 

Fields

Instances

Instances details
Show Eval Source # 
Instance details

Defined in Combinatorics.Mastermind

Methods

showsPrec :: Int -> Eval -> ShowS #

show :: Eval -> String #

showList :: [Eval] -> ShowS #

Eq Eval Source # 
Instance details

Defined in Combinatorics.Mastermind

Methods

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

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

Ord Eval Source # 
Instance details

Defined in Combinatorics.Mastermind

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 #

evaluate :: Ord a => [a] -> [a] -> Eval Source #

Given the code and a guess, compute the evaluation.

>>> filter ((Mastermind.Eval 2 0 ==) . Mastermind.evaluate "aabbb") $ replicateM 5 ['a'..'c']
["aaaaa","aaaac","aaaca","aaacc","aacaa","aacac","aacca","aaccc","acbcc","accbc","acccb","cabcc","cacbc","caccb","ccbbc","ccbcb","cccbb"]

evaluateAll :: Ord a => [[a]] -> [a] -> Map Eval Int Source #

numberDistinct :: Int -> Int -> Int -> Int -> Integer Source #

numberDistinct n k b w computes the number of matching codes, given that all codes have distinct symbols. n is the alphabet size, k the width of the code, b the number of black evaluation sticks and w the number of white evaluation sticks.

QC.forAll genMastermindDistinct $ \(n,k,b,w) -> let alphabet = take n ['a'..]; code = take k alphabet in Mastermind.numberDistinct n k b w == (genericLength $ filter ((Mastermind.Eval b w ==) . Mastermind.evaluate code) $ Comb.variate k alphabet)

only for testing

numberDistinctWhite :: Int -> Int -> Int -> Integer Source #

QC.forAll genMastermindDistinct $ \(n,k,_b,w) -> Mastermind.numberDistinctWhite n k w == Mastermind.numberDistinct n k 0 w