CF-Predictor

This extension predicts rating changes for Codeforces. It shows approximate deltas during and after the contest.

当前为 2018-02-01 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name CF-Predictor
  3. // @version 1.2.1
  4. // @description This extension predicts rating changes for Codeforces. It shows approximate deltas during and after the contest.
  5. // @author Originally by WslF, Edited by ZZYSonny
  6. // @match http://codeforces.com/contest/*/standings*
  7. // @connect cf-predictor-frontend.herokuapp.com
  8. // @grant GM_xmlhttpRequest
  9. // @namespace https://gf.qytechs.cn/users/169007
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14. var partyNum = 0;
  15. var deltas = [];
  16. showDeltas();
  17.  
  18. function modifyPartyHtml(index, elem) {
  19. var delta = 0;
  20.  
  21. if (partyNum > 0) {
  22. var handle = $(elem).find("td:eq(1)").find("a").first().html();
  23. if (handle) {
  24. //next 2 lines - fix for legendary grandmaster
  25. handle = handle.replace('<span class="legendary-user-first-letter">','');
  26. handle = handle.replace('</span>','');
  27. if (handle in deltas) {
  28. delta = Math.round(deltas[handle]);
  29. }
  30. }
  31. }
  32.  
  33. var text;
  34. if (partyNum == 0) {
  35. text = "<th class='top right' style='width: 4em;'><span title='Rating change''>&Delta;</span></th>";
  36. } else {
  37. var darkClass = "";
  38. if (partyNum % 2 == 1) {
  39. darkClass = "dark ";
  40. }
  41. if (delta > 0) {
  42. text = "<td class='" + darkClass + "right'><span style='color:green;font-weight:bold;'>+" + delta + "</span></td>";
  43. } else {
  44. text = "<td class='" + darkClass + "right'><span style='color:gray;font-weight:bold;'>" + delta + "</span></td>";
  45. }
  46. }
  47.  
  48. partyNum++;
  49. $(elem).append(text);
  50. }
  51.  
  52. function showDeltas() {
  53. var count = $(".standings").find("tr").length;
  54. if (count > 2) {
  55. var contestId = document.location.href.replace(/\D+/ig, ',').substr(1).split(',')[0];
  56. getDeltas(contestId, function() {
  57. $(".standings").find("tr").first().find("th").last().removeClass("right");
  58. $(".standings").find("tr").find("td").removeClass("right");
  59. $(".standings").find("tr").each(modifyPartyHtml);
  60. if (count % 2 == 0) {
  61. $(".standings").find("tr").last().find("td").last().replaceWith("<td class='smaller bottom dark right'> </td>");
  62. } else {
  63. $(".standings").find("tr").last().find("td").last().replaceWith("<td class='smaller bottom right'> </td>");
  64. }
  65. });
  66. }
  67. }
  68.  
  69. function getDeltas(contestId, callback) {
  70. var herokuServer = "https://cf-predictor-frontend.herokuapp.com/";
  71. var page = "GetNextRatingServlet?contestId=" + contestId;
  72.  
  73. var server = herokuServer + page;
  74. GM_xmlhttpRequest({
  75. method: "GET",
  76. url: server,
  77. onload: function(res) {
  78. var text = res.responseText;
  79. var data = JSON.parse(text);
  80. for (var i = 0; i < data.result.length; i++) {
  81. var handle = data.result[i].handle;
  82. var delta = data.result[i].newRating - data.result[i].oldRating;
  83. deltas[handle] = delta;
  84. }
  85. callback();
  86. }
  87. });
  88. }
  89.  
  90. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址