atcoder-submission-status

提出した解答のAC数,WA数,RE数,TLE数, etc..をわかりやすく表示します。

Mint 2019.05.30.. Lásd a legutóbbi verzió

  1. // ==UserScript==
  2. // @name atcoder-submission-status
  3. // @name:en atcoder-submission-status
  4. // @namespace https://github.com/9sako6/atcoder-userscripts
  5. // @version 0.1
  6. // @description 提出した解答のAC数,WA数,RE数,TLE数, etc..をわかりやすく表示します。
  7. // @description:en This script shows submission's statuses clearly!
  8. // @author 9sako6
  9. // @match https://atcoder.jp/contests/*/submissions/*
  10. // @exclude https://atcoder.jp/contests/*/submissions/me
  11. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js
  12. // @license MIT
  13. // ==/UserScript==
  14.  
  15. function makeTable() {
  16. 'use strict';
  17. /**
  18. * count each status
  19. */
  20. const statusPanel = document.getElementsByClassName('panel-default')[2];
  21. const cases = $(statusPanel).find('tr');
  22. const statusCodes = ['AC', 'WA', 'TLE', 'RE', 'CE', 'MLE', 'OLE', 'IE', 'WR'];
  23. let countAll = -1;
  24. let counter = {};
  25. // initialize counter
  26. statusCodes.forEach((val) => {
  27. counter[val] = 0;
  28. });
  29. cases.each((_, elem)=>{
  30. let texts = $(elem).find('td');
  31. texts.each((i, tdElem)=>{
  32. if (i == 1) { // if tdElem is status code
  33. const statusCode = $($(tdElem).find('span')[0]).text();
  34. counter[statusCode] += 1;
  35. }
  36. });
  37. countAll += 1;
  38. });
  39.  
  40. /**
  41. * make result table
  42. */
  43. // a wrapper element of table
  44. let wrapElem = document.createElement('div');
  45. wrapElem.id = 'added-result-panel';
  46. wrapElem.classList.add('panel', 'panel-default');
  47. var newContent = document.createTextNode('');
  48. wrapElem.appendChild(newContent);
  49. statusPanel.parentNode.insertBefore(wrapElem, statusPanel);
  50.  
  51. // table
  52. let trElem = '<tr>';
  53. statusCodes.forEach((status, i) => {
  54. const ACflag = (status === 'AC' ? true : false);
  55. const label = `<span
  56. class="label label-${ACflag ? 'success' : 'warning'}"
  57. aria-hidden="true"
  58. data-toggle="tooltip"
  59. data-placement="top"
  60. title=""
  61. >${status}</span>`;
  62. trElem += `<td style="line-height: 1.2em;"><span style="line-height: 1.8rem;
  63. ${counter[status] > 0 ? "font-weight: 700;" : ''}">
  64. ${label} ${counter[status]}/${countAll}
  65. </span></td>`;
  66. });
  67. trElem += '</tr>';
  68. const resultTable = `<table class="table table-bordered table-striped th-center">
  69. <tbody>${trElem}</tbody>
  70. </table>`;
  71. $('#added-result-panel').append(resultTable);
  72. }
  73.  
  74. (function() {
  75. try {
  76. makeTable();
  77. }catch(e){
  78. console.error(e);
  79. }
  80. })();