public override void RefreshPosibilities(Tuple <char, int> position, PositionStatus positionStatus, bool isSinked, ShipType?shipType)
        {
            if (Posibilities is not null)
            {
                if (positionStatus is PositionStatus.White || shipType is not ShipType.Battleship)
                {
                    Posibilities.RemoveAll(r => r.Any(rr => rr.Position.Equals(position)));
                }
                else
                {
                    Posibilities.Where(r => r.Any(rr => rr.Position.Equals(position))).ToList().ForEach(series =>
                    {
                        series.Single(r => r.Position.Equals(position)).Status = PositionStatus.Red;
                    });

                    if (isSinked)
                    {
                        Posibilities.RemoveAll(r => r.Any(rr => rr.Status != PositionStatus.Red));
                    }
                    else
                    {
                        Posibilities.RemoveAll(r => r.All(rr => rr.Status is PositionStatus.Red));
                    }
                }
            }
        public override Tuple <char, int> FindNextSquer(List <Square> SquareBoard, Tuple <char, int> currentPosition)
        {
            Posibilities ??= GeneratePosibilities(SquareBoard, currentPosition);
            var minimumCost   = Posibilities.Min(serries => serries.Count(r => r.Status is PositionStatus.Empty));
            var minimumSeries = Posibilities.Where(series => series.Count(r => r.Status is PositionStatus.Empty) == minimumCost).ToList();

            if (minimumSeries.Count() == 1)
            {
                return(minimumSeries.First().FirstOrDefault(r => r.Status is PositionStatus.Empty).Position);
            }
            else
            {
                return(FindCommonPosition(minimumSeries));
            }
        }