/// <summary>
 /// Creates all possible semantically unique concealed combinations for a given number of tiles and a set of tiles already
 /// used in melds.
 /// </summary>
 /// <param name="numberOfTiles">The number of tiles in the concealed part of the hand.</param>
 /// <param name="meldedTiles">The tiles used in the melded part of the hand.</param>
 public IEnumerable<Combination> Create(int numberOfTiles, Combination meldedTiles)
 {
     Validate.NotNegative(numberOfTiles, nameof(numberOfTiles));
       Validate.NotNull(meldedTiles, nameof(meldedTiles));
       Clear();
       var used = meldedTiles.Counts.ToList();
       for (var i = 0; i < TypesInSuit; ++i)
       {
     TilesInExternalMelds[i] = used[i];
       }
       return Create(numberOfTiles, TypesInSuit);
 }
Example #2
0
        /// <summary>
        /// Creates a new instance of TileGroupAnalyzer.
        /// </summary>
        public TileGroupAnalyzer(Combination concealedTiles, Combination meldedTiles, int meldCount, bool allowShuntsu)
        {
            Validate.NotNull(concealedTiles, nameof(concealedTiles));
              Validate.NotNull(meldedTiles, nameof(meldedTiles));
              Validate.InRange(meldCount, 0, 4, nameof(meldCount));

              _meldCount = meldCount;
              _concealed = concealedTiles.Counts.ToList();
              _used = meldedTiles.Counts.ToList();
              _tileTypeCount = concealedTiles.Counts.Count;
              _protoGroups = allowShuntsu ? SuitProtoGroups : HonorProtoGroups;
        }
 private static void CheckHand(int expectedCount, IList<int> concealedTiles, IList<int> meldedTiles, int meldCount)
 {
     var allowShuntsu = concealedTiles.Count == 9;
       var concealed = new Combination(concealedTiles);
       var melded = new Combination(meldedTiles);
       var analyzer = new TileGroupAnalyzer(concealed, melded, meldCount, allowShuntsu);
       var arrangements = analyzer.Analyze().ToList();
       var hand = $"({string.Join("", concealedTiles)})({string.Join("", meldedTiles)})({meldCount})";
       var arrangementTexts = arrangements.Select(a => $"({a.JantouValue}, {a.MentsuCount}, {a.MentsuValue})");
       var message = $"hand {hand} has wrong arrangements: {string.Join("", arrangementTexts)}";
       Assert.AreEqual(expectedCount, arrangements.Count, message);
 }
 /// <summary>
 /// Creates all possible semantically unique concealed combinations for a given number of tiles.
 /// </summary>
 public IEnumerable<Combination> Create(int numberOfTiles)
 {
     var noMeldedTiles = new Combination(new int[TypesInSuit]);
       return Create(numberOfTiles, noMeldedTiles);
 }