public
Last active

  • Download Gist
MasterMind.hs
Haskell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
import Test.HUnit
 
main = do runTestTT $ TestList [
juge [Rouge, Vert, Orange, Bleu] [Rouge, Vert, Orange, Bleu] ~?= End True
,juge [Rouge, Vert, Orange, Bleu] [Jaune, Vert, Jaune, Jaune] ~?= Retry (BienPlacé 1, MalPlacé 0)
,juge [Rouge, Vert, Orange, Bleu] [Jaune, Vert, Orange, Jaune] ~?= Retry (BienPlacé 2, MalPlacé 0)
,juge [Rouge, Vert, Orange, Bleu] [Vert, Jaune, Jaune, Jaune] ~?= Retry (BienPlacé 0, MalPlacé 1)
,juge [Rouge, Orange, Rouge, Rouge] [Orange, Orange, Orange, Orange] ~?= Retry (BienPlacé 1, MalPlacé 0)
]
 
data Couleur = Rouge | Vert | Orange | Bleu | Jaune
deriving (Eq)
data Resultat = End Bool | Retry (BienPlacé, MalPlacé)
deriving (Show, Eq)
data BienPlacé = BienPlacé Int
deriving (Show, Eq)
data MalPlacé = MalPlacé Int
deriving (Show, Eq)
 
type Secret = [Couleur]
type Proposition = [Couleur]
 
 
juge :: Secret -> Proposition -> Resultat
juge s p
| s == p = End True
| otherwise = Retry (BienPlacé bp, MalPlacé (min mp mp'))
where
compterLesTrue = length . filter (==True)
bp = compterLesTrue $ zipWith (==) s p
compterLesMalPlacé x y = (compterLesTrue $ map (`elem` x) y) - bp
mp = compterLesMalPlacé s p
mp' = compterLesMalPlacé p s

Je crois qu'il manque un autre fichier, celui où tu as juste fait run qqchoz, non ?

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.