Ejemplo n.º 1
0
 public static Round ParseRoundWithXML(XmlNode node)
 {
     Round round = new Round();
     Dictionary<string, string> dict = XmlHelper.ParseXml(node);
     round.roundID = dict["round_id"];
     round.name = dict["short_name"];
     round.name = Regex.Replace(round.name, "Single Round Match", "SRM");
     round.type = dict["round_type_desc"];
     round.fullname = dict["full_name"];
     round.date = dict["date"];
     round.roundIndex = ind++;
     return round;
 }
Ejemplo n.º 2
0
 /*static List<Round> ReadRounds(Dictionary<String, Round> roundInfo)
 {
     string roundsFileName = "NewRounds.txt";
     List<Round> rounds = new List<Round>();
     StreamReader reader = new StreamReader(roundsFileName);
     while (!reader.EndOfStream)
     {
         string s = reader.ReadLine();
         rounds.Add(roundInfo[s]);
     }
     reader.Close();
     return rounds;
 }*/
 static void UpdateRound(Round round, Dictionary<String, String> ZJUers, List<Round> tour, List<Round> srm,
     Dictionary<String, CoderStat> stats, List<Record> ratingRecordList, List<Record> challengeInfoList,
     List<Record> volRecordList, List<Record> divWinnerList, List<Record> onsiteList, Dictionary<CoderStat, List<Record>> coderInfo)
 {
     string URL = "http://www.topcoder.com/tc?module=BasicData&c=dd_round_results&rd=" + round.roundID;
     XmlDocument xml = XmlHelper.LoadXML(URL, round.roundID + ".xml");
     if (xml == null)
     {
         return;
     }
     XmlNode rootNode = xml.LastChild;
     List<Coder> div1 = new List<Coder>(), div2 = new List<Coder>();
     foreach (XmlNode node in rootNode.ChildNodes)
     {
         Coder coder = Coder.ParseCoderWithXML(node);
         if (coder != null && ZJUers.Keys.Contains(coder.handle))
         {
             coder.id = ZJUers[coder.handle];
             CoderStat coderStat = null;
             Record record = new Record();
             record.coder = coder;
             record.round = round;
             if (stats.Keys.Contains(coder.id))
             {
                 coderStat = stats[coder.id];
                 coderStat.UpdateStat(coder, round);
                 coderInfo[coderStat].Add(record);
             }
             else
             {
                 coderStat = CoderStat.NewCoderStat(coder, round);
                 stats.Add(coder.id, coderStat);
                 coderInfo[coderStat] = new List<Record>();
                 coderInfo[coderStat].Add(record);
             }
             if (coder.division == 1)
             {
                 foreach (Coder other in div1)
                 {
                     coderStat.DualWith(coder, other);
                     stats[other.id].DualWith(other, coder);
                 }
                 div1.Add(coder);
             }
             else
             {
                 foreach (Coder other in div2)
                 {
                     coderStat.DualWith(coder, other);
                     stats[other.id].DualWith(other, coder);
                 }
                 div2.Add(coder);
             }
             if (Convert.ToDouble(coder.challengePoints) > 0)
             {
                 challengeInfoList.Add(record);
             }
             if (ratingRecordList.Count == 0 || coder.newRating > ratingRecordList.Last().coder.newRating)
             {
                 ratingRecordList.Add(record);
             }
             if (coder.vol >= 600)
             {
                 volRecordList.Add(record);
             }
             if (coder.divRank == 1)
             {
                 divWinnerList.Add(record);
             }
             if (IsOnsite(round.name))
             {
                 onsiteList.Add(record);
             }
         }
     }
     if (div1.Count != 0 || div2.Count != 0)
     {
         div1.Sort(new Comparison<Coder>(Coder.CompareByRank));
         div2.Sort(new Comparison<Coder>(Coder.CompareByRank));
         HTMLGenerator.GenerateHTMLForRound(round, div1, div2);
         if (round.type.Equals("Single Round Match"))
         {
             srm.Add(round);
         }
         else
         {
             tour.Add(round);
         }
     }
 }
Ejemplo n.º 3
0
        public void UpdateStat(Coder coder, Round round)
        {
            total_challenges += coder.fail_challenges + coder.succ_challenges;
            succ_challenges += coder.succ_challenges;
            rating = coder.newRating;
            maxrating = Math.Max(maxrating, coder.newRating);
            vol = coder.vol;
            chaPoints += Convert.ToDouble(coder.challengePoints);

            myLastDate = round.date;
            ++events;
            if (!HTMLGenerator.RatingToString(coder.oldRating, coder.newCoder).Equals(HTMLGenerator.RatingToString(coder.newRating, false)))
            {
                ++colorChangeTimes;
            }
            if (DateTime.Parse(round.date).AddYears(1) >= DateTime.Now)
            {
                ++eventsLastYear;
            }
            for (int i = 0; i < 3; ++i)
            {
                if (coder.problemStatus[i].Equals("Challenge Succeeded") || coder.problemStatus[i].Equals("Failed System Test"))
                {
                    ++submits;
                }
                else if (coder.problemStatus[i].Equals("Passed System Test"))
                {
                    ++submits;
                    ++solves;
                }
            }
        }
        public static void GenerateHTMLForRound(Round round, List<Coder> div1, List<Coder> div2)
        {
            string dire = Directory.GetCurrentDirectory();
            string rankFile = dire + "\\rank\\" + round.roundID + ".html";
            FileStream stream = new FileStream(rankFile, FileMode.Create);
            StreamWriter writer = new StreamWriter(stream);
            writer.WriteLine("<html><body>");
            writer.WriteLine("<head><meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">");
            writer.WriteLine("<title>" + round.name + "</title><link rel=\"stylesheet\" href=\"rank.css\" type=\"text/css\" /></head>");
            writer.WriteLine("<h1><a href=\"http://www.topcoder.com/stat?c=round_stats&rd=" + round.roundID + "\" class=\"eventText\">" + round.name + "</a></h1>");
            if (div1.Count != 0)
            {
                writer.WriteLine("<div>");
                writer.WriteLine("<h2>Div 1</h2>");
                writer.WriteLine("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tbody>");
                writer.WriteLine("\t<tr class=\"titleLine\">");
                writer.WriteLine("\t\t<td><span>Rank</span></td>");
                writer.WriteLine("\t\t<td><span>Handle</span></td>");
                writer.WriteLine("\t\t<td><span>Points</span></td>");
                if (!round.type.Equals("Single Round Match")) writer.WriteLine("\t\t<td><span>Advanced</span></td>");
                writer.WriteLine("\t\t<td><span>Level 1</span></td>");
                writer.WriteLine("\t\t<td><span>Level 2</span></td>");
                writer.WriteLine("\t\t<td><span>Level 3</span></td>");
                writer.WriteLine("\t\t<td><span>Challenge</span></td>");
                writer.WriteLine("\t\t<td><span>Challenge Points</span></td>");
                writer.WriteLine("\t\t<td><span>Old Rating</span></td>");
                writer.WriteLine("\t\t<td><span>New Rating</span></td>");
                writer.WriteLine("\t\t<td><span>Rating Change</span></td>");
                writer.WriteLine("\t\t<td><span>Volatility</span></td>");
                writer.WriteLine("\t</tr>");
                foreach (Coder coder in div1)
                {
                    writer.WriteLine("\t<tr>");
                    writer.WriteLine("\t\t<td><a href=\"http://www.topcoder.com/stat?c=coder_room_stats&rd=" + round.roundID + "&cr=" + coder.id + "\">" + coder.divRank + "</a></td>");
                    writer.WriteLine("\t\t<td><a href=\"../member/" + coder.id + ".html\" class=\"" + ColorToString(coder.colortype) + "\">" + coder.handle + "</a></td>");
                    writer.WriteLine("\t\t<td><span>" + coder.finalPoints + "</span></td>");
                    if (!round.type.Equals("Single Round Match")) writer.WriteLine("\t\t<td><span>" + coder.advanced + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + StatusToString(coder.problemStatus[0]) + "\">" + (coder.problemStatus[0].Equals("Passed System Test") ? coder.problemPoints[0] : coder.problemStatus[0]) + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + StatusToString(coder.problemStatus[1]) + "\">" + (coder.problemStatus[1].Equals("Passed System Test") ? coder.problemPoints[1] : coder.problemStatus[1]) + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + StatusToString(coder.problemStatus[2]) + "\">" + (coder.problemStatus[2].Equals("Passed System Test") ? coder.problemPoints[2] : coder.problemStatus[2]) + "</span></td>");
                    writer.WriteLine("\t\t<td><span>" + (coder.succ_challenges > 0 ? "+" : "") + coder.succ_challenges + "/" + (coder.fail_challenges > 0 ? "-" : "") + coder.fail_challenges + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + ChallengeScoreToString(coder.challengePoints) + "\">" + coder.challengePoints + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + RatingToString(coder.oldRating, coder.newCoder) + "\">" + coder.oldRating + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + RatingToString(coder.newRating, false) + "\">" + coder.newRating + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + RatingChangeToString(coder.newRating - coder.oldRating) + "\">" + RatingChangeToImage(coder.newRating - coder.oldRating) + Math.Abs(coder.newRating - coder.oldRating) + "</span></td>");
                    writer.WriteLine("\t\t<td><span>" + coder.vol + "</span></td>");
                    writer.WriteLine("\t</tr>");
                }
                writer.WriteLine("</tbody></table></div>");
            }

            if (div2.Count != 0)
            {
                writer.WriteLine("<div>");
                writer.WriteLine("<h2>Div 2</h2>");
                writer.WriteLine("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tbody>");
                writer.WriteLine("\t<tr class=\"titleLine\">");
                writer.WriteLine("\t\t<td><span>Rank</span></td>");
                writer.WriteLine("\t\t<td><span>Handle</span></td>");
                writer.WriteLine("\t\t<td><span>Points</span></td>");
                if (!round.type.Equals("Single Round Match")) writer.WriteLine("\t\t<td><span>Advanced</span></td>");
                writer.WriteLine("\t\t<td><span>Level 1</span></td>");
                writer.WriteLine("\t\t<td><span>Level 2</span></td>");
                writer.WriteLine("\t\t<td><span>Level 3</span></td>");
                writer.WriteLine("\t\t<td><span>Challenge</span></td>");
                writer.WriteLine("\t\t<td><span>Challenge Points</span></td>");
                writer.WriteLine("\t\t<td><span>Old Rating</span></td>");
                writer.WriteLine("\t\t<td><span>New Rating</span></td>");
                writer.WriteLine("\t\t<td><span>Rating Change</span></td>");
                writer.WriteLine("\t\t<td><span>Volatility</span></td>");
                writer.WriteLine("\t</tr>");
                foreach (Coder coder in div2)
                {
                    writer.WriteLine("\t<tr>");
                    writer.WriteLine("\t\t<td><a href=\"http://www.topcoder.com/stat?c=coder_room_stats&rd=" + round.roundID + "&cr=" + coder.id + "\">" + coder.divRank + "</a></td>");
                    writer.WriteLine("\t\t<td><a href=\"../member/" + coder.id + ".html\" class=\"" + ColorToString(coder.colortype) + "\">" + coder.handle + "</a></td>");
                    writer.WriteLine("\t\t<td><span>" + coder.finalPoints + "</span></td>");
                    if (!round.type.Equals("Single Round Match")) writer.WriteLine("\t\t<td><span>" + coder.advanced + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + StatusToString(coder.problemStatus[0]) + "\">" + (coder.problemStatus[0].Equals("Passed System Test") ? coder.problemPoints[0] : coder.problemStatus[0]) + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + StatusToString(coder.problemStatus[1]) + "\">" + (coder.problemStatus[1].Equals("Passed System Test") ? coder.problemPoints[1] : coder.problemStatus[1]) + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + StatusToString(coder.problemStatus[2]) + "\">" + (coder.problemStatus[2].Equals("Passed System Test") ? coder.problemPoints[2] : coder.problemStatus[2]) + "</span></td>");
                    writer.WriteLine("\t\t<td><span>" + (coder.succ_challenges > 0 ? "+" : "") + coder.succ_challenges + "/" + (coder.fail_challenges > 0 ? "-" : "") + coder.fail_challenges + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + ChallengeScoreToString(coder.challengePoints) + "\">" + coder.challengePoints + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + RatingToString(coder.oldRating, coder.newCoder) + "\">" + coder.oldRating + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + RatingToString(coder.newRating, false) + "\">" + coder.newRating + "</span></td>");
                    writer.WriteLine("\t\t<td><span class=\"" + RatingChangeToString(coder.newRating - coder.oldRating) + "\">" + RatingChangeToImage(coder.newRating - coder.oldRating) + Math.Abs(coder.newRating - coder.oldRating) + "</span></td>");
                    writer.WriteLine("\t\t<td><span>" + coder.vol + "</span></td>");
                    writer.WriteLine("\t</tr>");
                }
                writer.WriteLine("</tbody></table></div>");
            }
            writer.WriteLine("<div class=\"backDiv\">");
            writer.WriteLine("<h3><a href=\"../ZJUerXTCer.html\" class=\"backLink\">Back to homepage</h3>");
            writer.WriteLine("</div>");

            writer.WriteLine("</body></html>");
            writer.Close();
            stream.Close();
        }
Ejemplo n.º 5
0
 public static CoderStat NewCoderStat(Coder coder, Round round)
 {
     CoderStat coderStat = new CoderStat();
     coderStat.handle = coder.handle;
     coderStat.id = coder.id;
     coderStat.win = new Dictionary<string, int>();
     coderStat.lose = new Dictionary<string, int>();
     coderStat.deuce = new Dictionary<string, int>();
     coderStat.UpdateStat(coder, round);
     return coderStat;
 }