private IEnumerable <KeyValuePair <BattleProcess.ShipHpStatus, TriState> > CalcMvpStatus(IReadOnlyList <BattleProcess.ShipHpStatus> EndShips)
        {
            if (EndShips == null)
            {
                yield break;
            }

            var mvpRange = EndShips.Aggregate(new FuzzyInt(), (range, ship) => FuzzyInt.UpperRange(range, ship.DeliveredDamage));
            var fuzzy    = EndShips.Select(x => x.DeliveredDamage).Where(x => x.LowerBound != x.UpperBound);

            if (fuzzy.Count() != 0)
            {
                mvpRange.LowerBound = Math.Max(mvpRange.LowerBound, fuzzy.Max(x => x.UpperBound) / fuzzy.Count());
            }

            var inRangeState = EndShips.Count(x => (x.DeliveredDamage >= mvpRange) != TriState.No) == 1 ? TriState.Yes : TriState.DK;

            if (mvpRange.UpperBound == mvpRange.LowerBound)
            {
                inRangeState = TriState.Yes;
            }
            foreach (var ship in EndShips)
            {
                yield return(new KeyValuePair <BattleProcess.ShipHpStatus, TriState>(ship, (ship.DeliveredDamage >= mvpRange) != TriState.No ? inRangeState : TriState.No));

                if (mvpRange.UpperBound == mvpRange.LowerBound && ship.DeliveredDamage.LowerBound == mvpRange.LowerBound)
                {
                    inRangeState = TriState.No;
                }
            }
        }