Greasy Fork is available in English.

AtCoderDetailedRating

レーティングを細かく表示

Versione datata 07/02/2023. Vedi la nuova versione l'ultima versione.

  1. // ==UserScript==
  2. // @name AtCoderDetailedRating
  3. // @namespace https://twitter.com/merom686
  4. // @version 1.0
  5. // @description レーティングを細かく表示
  6. // @author merom686
  7. // @match https://atcoder.jp/users/*/history*
  8. // ==/UserScript==
  9.  
  10. (function(){
  11. let ma = location.href.match(/^https:\/\/atcoder\.jp\/users\/(\w+)\/history(\?contestType=(\w+))?/);
  12. let type = 'algo';
  13. if (ma[3]) type = ma[3];
  14. let user = ma[1];
  15.  
  16. const S = 724.4744301, R = 0.8271973364;
  17. const T = (1 - 0.9) / Math.sqrt(1 - 0.81);
  18. let F = (n) => {
  19. return T * Math.sqrt(0.81 - Math.pow(0.81, n + 1)) / (0.9 - Math.pow(0.9, n + 1));
  20. };
  21. let f = (n) => {
  22. return (F(n) - T) / (F(1) - T) * 1200;
  23. };
  24.  
  25. let tbody = document.getElementsByTagName("tbody")[0];
  26. let trs = tbody.getElementsByTagName("tr");
  27. let n = trs.length;
  28.  
  29. let q = [];
  30. let k = 0, s0 = 0, s1 = 0;
  31.  
  32. for (let i = n - 1; i >= 0; i--){
  33. let tds = trs[i].getElementsByTagName("td");
  34. if (tds[4].innerText == "-") continue;
  35.  
  36. let p = parseInt(tds[3].innerText);
  37. let r = 0;
  38. if (type == 'algo'){
  39. s0 += Math.pow(2.0, p / 800.0);
  40. s0 *= 0.9;
  41. s1 += 1;
  42. s1 *= 0.9;
  43. r = 800 * Math.log2(s0 / s1) - f(++k);
  44. } else {
  45. for (let j = 1; j <= 100; j++){
  46. q.push(p - S * Math.log(j));
  47. }
  48. q.sort((i0, i1) => i1 - i0);
  49. s0 = 0; s1 = 0;
  50. for (let j = 99; j >= 0; j--){
  51. s0 += q[j];
  52. s0 *= R;
  53. s1 += 1;
  54. s1 *= R;
  55. }
  56. r = s0 / s1;
  57. }
  58. if (r < 400) r = Math.exp((r - 400) / 400) * 400;
  59. tds[4].innerText = r.toFixed(3);
  60. }
  61. })();