public IEnumerable <(Card, int)> Draw(Hand hand, Board board, CardCollection graveyard) { return(deckDistribution.Select(kvp => (kvp.Key, kvp.Value - hand.Count(kvp.Key) - board.Count(kvp.Key) - graveyard.Count(kvp.Key))).Where(x => x.Item2 > 0)); }
public BigInteger HandMicrostates(Hand hand) { var keys = deckDistribution.Keys; return(keys.Aggregate(new BigInteger(1), (c, n) => c * Utils.NChooseK(deckDistribution[n], hand.Count(n)))); }