diff --git a/src/Hanafuda/KoiKoi/Yaku.hs b/src/Hanafuda/KoiKoi/Yaku.hs index e8b5502..85a1b02 100644 --- a/src/Hanafuda/KoiKoi/Yaku.hs +++ b/src/Hanafuda/KoiKoi/Yaku.hs @@ -25,11 +25,13 @@ data Yaku = | TsukiFuda deriving (Eq, Ord, Read, Show) type YakuRater = Pack -> Maybe Points +type YakuDistance = Pack -> Int type Score = M.Map Yaku Points data YakuFinder = YakuFinder { yaku :: Yaku , rater :: YakuRater + , distance :: YakuDistance } instance Eq YakuFinder where @@ -62,7 +64,11 @@ moreThan count _ pack = index :: (Yaku, [Card], (Pack -> YakuRater)) -> YakusByCard index (yaku, cards, scorer) = let pack = packOfCards cards in - let yakuFinder = YakuFinder {yaku, rater = scorer pack . intersection pack} in + let yakuFinder = YakuFinder { + yaku + , rater = scorer pack . intersection pack + , distance = size . difference pack + } in foldl (\yakusByCard card -> M.insert card (S.singleton yakuFinder) yakusByCard) M.empty cards finders :: Monthly YakusByCard