private string ConstructSouthHand(HandsNorthSouth strHand, Auction auction, string shapeLengthStr) { string strControls = GetAuctionForControlsWithOffset(auction, new Bid(3, Suit.Diamonds)); if (!controlsAuctions.TryGetValue(strControls, out var possibleControls)) { return($"Auction not found in controls. controls: {strControls}. NorthHand: {strHand.NorthHand}. SouthHand: {strHand.SouthHand}"); } var matches = GetMatchesWithNorthHand(shapeLengthStr, possibleControls, strHand.NorthHand); switch (matches.Count()) { case 0: return($"No matches found. Possible controls: {string.Join('|', possibleControls)}. NorthHand: {strHand.NorthHand}. SouthHand: {strHand.SouthHand}"); case 1: { var southHandStr = HandWithx(strHand.SouthHand); var shapeStr = matches.First(); if (shapeStr == southHandStr) { return($"Match is found: {shapeStr}. NorthHand: {strHand.NorthHand}. SouthHand: {strHand.SouthHand}"); } else { return($"SouthHand is not equal to expected. Expected: {shapeStr}. Actual {southHandStr}. NorthHand: {strHand.NorthHand}. SouthHand: {strHand.SouthHand}"); } } default: return($"Multiple matches found. Matches: {string.Join('|', matches)}. NorthHand: {strHand.NorthHand}. SouthHand: {strHand.SouthHand}"); } }
private void AddHandAndAuction(HandsNorthSouth strHand, Auction auction) { var suitLengthSouth = strHand.SouthHand.Split(',').Select(x => x.Length); var str = string.Join("", suitLengthSouth); if (IsFreakHand(str)) { return; } var strAuction = auction.GetBidsAsString(Player.South, x => x.Value[Player.South].fase == Fase.Shape); AddHandPerAuction(str, strAuction); var suitLengthNorth = strHand.NorthHand.Split(',').Select(x => x.Length); var suitLengthNS = suitLengthNorth.Zip(suitLengthSouth, (x, y) => x + y); var longestSuit = (Suit)(3 - suitLengthNS.ToList().IndexOf(suitLengthNS.Max())); statistics.AddOrUpdateDeclarer(auction.GetDeclarer(longestSuit)); statistics.AddOrUpdateContract(auction); // Start calculating hand expectedSouthHands.AppendLine(ConstructSouthHand(strHand, auction, shapeAuctions[strAuction])); }
private HandsNorthSouth ShuffleRandomHand() { var handsNorthSouth = new HandsNorthSouth(); var cards = Shuffling.FisherYates(26).ToList(); var orderedCardsNorth = cards.Take(13).OrderByDescending(x => x.Suit).ThenByDescending(c => c.Face, new FaceComparer()); handsNorthSouth.NorthHand = Common.GetDeckAsString(orderedCardsNorth); unOrderedCards = cards.Skip(13).Take(13).ToList(); var orderedCardsSouth = unOrderedCards.OrderByDescending(x => x.Suit).ThenByDescending(c => c.Face, new FaceComparer()); handsNorthSouth.SouthHand = Common.GetDeckAsString(orderedCardsSouth); return(handsNorthSouth); }