public double CalculateProbability(Tiles tile) { var N = Unknown.CountAll(); for (int i = 0; i < 8; i++) { if (NotInHand[i]) { N -= Unknown.Count(TilesMethods.GetTileByNumber(i + 1)); } } var k = Unknown.Count(tile); if (k < 1 || NotInHand[tile.GetNumber() - 1]) { return(0.0); } var n = HandSize; if (n < 1) { return(0.0); } var x = Enumerable.Range(1, k); double Result = CHP(N, k, n, x); if (1 < Result) { return(1.0); } return(Result); }
public void Add(int number) { Tiles tile = TilesMethods.GetTileByNumber(number); if (AtMax(tile)) { throw new InvalidTileException("Too many of the same tile in collection."); } TileNumbers[number - 1]++; }
public Tiles Remove(int number) { Tiles tile = TilesMethods.GetTileByNumber(number); if (TileNumbers[number - 1] < 1) { throw new InvalidTileOperationException("No tile to remove."); } TileNumbers[number - 1]--; return(tile); }