public bool ContainsQuad() { var allGroups = TileGrouper.FindAllGroupsInTiles(UncalledTiles); return(allGroups.Any(group => group.IsQuad()) || (CalledSets.Any(group => group.IsTriplet() && UncalledTiles.Contains(group.First())))); }
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); }