Exemple #1
0
        public void SetScale(int bins, double min, double max)
        {
            if (scaledWidth == bins && scaledMin == min && scaledMax == max)
            {
                return;
            }

            scaledWidth = bins;
            scaledMin   = min;
            scaledMax   = max;
            scaleRange  = max - min;
            scaleFactor = bins / scaleRange;
            scaledPointList.Clear();
            scaledPointList.Capacity = bins * 4;            // store 4 points for each bin (entry, min, max, exit)
            scaledMaxIndexList.Clear();
            scaledMaxIndexList.Capacity = bins;             // store just the index of the max point for each bin
            int lastBin          = -1;
            int curBinEntryIndex = -1;
            int curBinMinIndex   = -1;
            int curBinMaxIndex   = -1;
            int curBinExitIndex  = -1;

            for (int i = 0; i < fullPointList.Count; ++i)
            {
                ZedGraph.PointPair point = fullPointList[i];

                if (point.X < min)
                {
                    continue;
                }

                if (point.X > max)
                {
                    break;
                }

                int curBin = (int)Math.Round(scaleFactor * (point.X - min));
                if (curBin > lastBin)                  // new bin, insert points of last bin
                {
                    if (lastBin > -1)
                    {
                        scaledMinIndex = curBinMinIndex;
                        scaledPointList.Add(fullPointList[curBinEntryIndex]);
                        if (curBinEntryIndex != curBinMinIndex)
                        {
                            scaledPointList.Add(fullPointList[curBinMinIndex]);
                        }
                        if (curBinEntryIndex != curBinMaxIndex &&
                            curBinMinIndex != curBinMaxIndex)
                        {
                            scaledPointList.Add(fullPointList[curBinMaxIndex]);
                        }
                        if (curBinEntryIndex != curBinMaxIndex &&
                            curBinMinIndex != curBinMaxIndex &&
                            curBinMaxIndex != curBinExitIndex)
                        {
                            scaledPointList.Add(fullPointList[curBinExitIndex]);
                        }
                        if (fullPointList[curBinMaxIndex].Y != 0)
                        {
                            scaledMaxIndexList.Add(curBinMaxIndex);
                        }
                    }
                    lastBin          = curBin;
                    curBinEntryIndex = i;
                    curBinMinIndex   = i;
                    curBinMaxIndex   = i;
                }
                else                   // same bin, set exit point
                {
                    curBinExitIndex = i;
                    if (point.Y > fullPointList[curBinMaxIndex].Y)
                    {
                        scaledMaxIndex = curBinMaxIndex = i;
                    }
                    else if (point.Y < fullPointList[curBinMaxIndex].Y)
                    {
                        curBinMinIndex = i;
                    }
                }
            }

            if (lastBin > -1)
            {
                scaledMinIndex = curBinMinIndex;
                scaledPointList.Add(fullPointList[curBinEntryIndex]);
                if (curBinEntryIndex != curBinMinIndex)
                {
                    scaledPointList.Add(fullPointList[curBinMinIndex]);
                }
                if (curBinEntryIndex != curBinMaxIndex &&
                    curBinMinIndex != curBinMaxIndex)
                {
                    scaledPointList.Add(fullPointList[curBinMaxIndex]);
                }
                if (curBinEntryIndex != curBinMaxIndex &&
                    curBinMinIndex != curBinMaxIndex &&
                    curBinMaxIndex != curBinExitIndex)
                {
                    scaledPointList.Add(fullPointList[curBinExitIndex]);
                }
                if (fullPointList[curBinMaxIndex].Y != 0)
                {
                    scaledMaxIndexList.Add(curBinMaxIndex);
                }
            }
        }
        private void ProcessList()
        {
            if (currentUser == null)
            {
                currentUser      = new UserInfo();
                currentUser.uid  = currentUser.uname = currentUser.name = "[-]";
                currentUser.subs = new List <List <long> >();
                currentUser.Process();
            }

            userRank = RegistryAccess.GetUserRank(currentUser.uname);
            if (userRank == null)
            {
                userRank          = new UserRanklist();
                userRank.username = currentUser.uname;
                userRank.rank     = 0;
                userRank.activity = new List <long>();
                for (int i = 0; i < 5; ++i)
                {
                    userRank.activity.Add(0);
                }
            }

            _acOverTime.Clear();
            _subOverTime.Clear();
            _RankCount.Clear();

            _firstSub    = long.MaxValue;
            _solvedCount = _unsolvedCount = _tryCount = _totalSubmission = 0;
            _subInAnsiC  = _subInCPP = _subInCPP11 = _subInJava = _subInPascal = 0;
            _acCount     = _waCount = _tleCount = _reCount = _peCount = 0;
            _ceCount     = _oleCount = _subeCount = _mleCount = 0;

            List <long> solved = new List <long>();

            foreach (UserSubmission usub in currentUser.submissions)
            {
                //total submission count
                _totalSubmission++;

                //age meter
                if (_firstSub > usub.sbt)
                {
                    _firstSub = usub.sbt;
                }

                //add rank count
                if (usub.IsAccepted())
                {
                    _RankCount.Add(usub.rank, usub.pid);

                    //solve count
                    if (!solved.Contains(usub.pnum))
                    {
                        _solvedCount++;
                        solved.Add(usub.pnum);
                    }
                }


                //language
                switch ((Language)usub.lan)
                {
                case Language.C: _subInAnsiC++; break;

                case Language.Java: _subInJava++; break;

                case Language.Pascal: _subInPascal++; break;

                case Language.CPP: _subInCPP++; break;

                case Language.CPP11: _subInCPP11++; break;
                }

                //submissionPerTime
                double xval = new ZedGraph.XDate(UnixTimestamp.FromUnixTime(usub.sbt));
                if (_totalSubmission == 1)
                {
                    _subOverTime.Add(xval, 0);
                }

                _subOverTime.Add(xval, _totalSubmission);
                _acOverTime.Add(xval, _solvedCount);

                //verdict
                switch ((Verdict)usub.ver)
                {
                case Structures.Verdict.CompileError: _ceCount++; break;

                case Structures.Verdict.RuntimeError: _reCount++; break;

                case Structures.Verdict.OutputLimit: _oleCount++; break;

                case Structures.Verdict.TimLimit: _tleCount++; break;

                case Structures.Verdict.MemoryLimit: _mleCount++; break;

                case Structures.Verdict.WrongAnswer: _waCount++; break;

                case Structures.Verdict.PresentationError: _peCount++; break;

                case Structures.Verdict.Accepted: _acCount++; break;
                }
            }

            //finalize
            _tryCount      = currentUser.TryList.Count;
            _unsolvedCount = _tryCount - _solvedCount;
            _subOverTime.Add(new ZedGraph.XDate(DateTime.Now), _totalSubmission);
            _acOverTime.Add(new ZedGraph.XDate(DateTime.Now), _solvedCount);
        }
Exemple #3
0
        public static void FilterData(ZedGraph.PointPairList data, ref ZedGraph.PointPairList filter, double speed_max, double alfa_max, double alfa_null, int periodInMin)
        {
            if (data != null)
            {
                if (filter == null || filter.Count < 2)
                {
                    filter = new ZedGraph.PointPairList();
                    filter.Add(data[0]);
                    filter.Add(data[1]);
                }

                ZedGraph.PointPairList filterPoints = new ZedGraph.PointPairList();

                for (int i = filter.Count; i < data.Count; i++)
                {
                    filterPoints.Clear();
                    ZedGraph.PointPair notFilteredMeasure = data[i];
                    for (int j = filter.Count-1; j > 0 ; j--)
                    {
                        if (DateTime.FromOADate(notFilteredMeasure.X).Subtract(new TimeSpan(0, periodInMin, 0)) < DateTime.FromOADate(filter[j].X))
                        {
                            filterPoints.Add(filter[j]);
                        }
                        else
                            break;
                    }
                    double midX = filterPoints.Average(value => value.X);
                    double midY = filterPoints.Average(value => value.Y);
                    double alfa = 0.0;
                    double nominalSpeed = speed_max / 2.0;
                    //raschet skorosti
                    TimeSpan interval = DateTime.FromOADate(notFilteredMeasure.X) - DateTime.FromOADate(midX);
                    double speed = Math.Abs(notFilteredMeasure.Y - midY) / (0.5 * interval.TotalSeconds);
                    //alfa ot v
                    if (speed < nominalSpeed)
                    {
                        alfa = (alfa_max - alfa_null) * speed / nominalSpeed + alfa_null;
                    }
                    else if (speed >= nominalSpeed && speed < speed_max)
                    {
                        alfa = alfa_max;
                    }
                    else if (speed >= speed_max && speed < 2 * speed_max)
                    {
                        alfa = 2 - speed / speed_max;
                    }
                    else if (speed > 2 * speed_max)
                    {
                        alfa = 0;
                    }

                    //vichislenie skorrekt urovnia
                    double skor_uroven = notFilteredMeasure.Y * alfa + (1 - alfa) * midY;
                    //skor_uroven = Math.Round(skor_uroven, 2);
                    //vichislenie skorrekt urovnia

                    filter.Add(new ZedGraph.PointPair(notFilteredMeasure.X, skor_uroven));
                }
                if (filter.Count > 3)
                {
                    filter[0].Y = filter[2].Y;
                    filter[1].Y = filter[2].Y;
                }
            }
        }