예제 #1
0
        public bool ContainsQuad()
        {
            var allGroups = TileGrouper.FindAllGroupsInTiles(UncalledTiles);

            return(allGroups.Any(group => group.IsQuad()) ||
                   (CalledSets.Any(group => group.IsTriplet() && UncalledTiles.Contains(group.First()))));
        }
예제 #2
0
        public IList <IList <TileGrouping> > FindAllWaysToParseWinningHand()
        {
            var allWaysToSplitTiles = TileGrouper.FindAllWaysToGroupTilesAfterRemovingAPair(UncalledTiles);

            if (IsThirteenOrphans(UncalledTiles, CalledSets))
            {
                allWaysToSplitTiles.Add(new List <TileGrouping> {
                    new TileGrouping(UncalledTiles.ToArray())
                });
            }
            if (IsSevenPairs(UncalledTiles, CalledSets))
            {
                allWaysToSplitTiles.Add(new List <TileGrouping> {
                    new TileGrouping(UncalledTiles.ToArray())
                });
            }

            var waysToSplitTilesThatUseAllTiles = allWaysToSplitTiles.Where(
                allGroups => allGroups.Sum(t => t.Count()) == UncalledTiles.Count() ||
                allGroups.All(group => group.IsBonus())).ToList();

            return(waysToSplitTilesThatUseAllTiles);
        }