private (Yaku, int) Flags() { var bestHan = 0; var bestFu = 0; var results = new HashSet <Yaku>(); foreach (var arrangement in _arrangements) { var(yaku, fu) = YakuForArrangement(arrangement); var han = Han.Calculate(yaku); if (han > bestHan || han == bestHan && fu > bestFu) { results.Clear(); bestHan = han; bestFu = fu; } if (han == bestHan && fu == bestFu) { results.Add(yaku); } } return(results.OrderByDescending(x => x).First(), bestFu); }
public static (int, int) Chankan(ProgressiveScoringData data, WindScoringData wind, TileType winningTile) { var(yaku, fu) = data.YakuAndFu(wind, winningTile, true); var han = Han.CalculateScoringField(yaku); return(han, fu); }