Greasy Fork is available in English.

AtCoder Show Me Score Table

コンテスト名を配点に置き換えちゃうスクリプト

Από την 23/03/2024. Δείτε την τελευταία έκδοση.

  1. // ==UserScript==
  2. // @name AtCoder Show Me Score Table
  3. // @namespace https://atcoder.jp/
  4. // @version 0.2
  5. // @description コンテスト名を配点に置き換えちゃうスクリプト
  6. // @author hayatroid
  7. // @license MIT
  8. // @match https://atcoder.jp/contests/*
  9. // @exclude https://atcoder.jp/contests/*/json
  10. // ==/UserScript==
  11.  
  12. (async () => {
  13. // 配点 (e.g. "100 - 200 - 300 - 400 - 500 - 600") の取得
  14. const res = await fetch(`https://atcoder.jp/contests/${contestScreenName}`)
  15. .then((response) => {
  16. if (!response.ok) throw new Error(`HTTP error: ${response.status}`);
  17. return response.text();
  18. })
  19. .then((text) => {
  20. const parser = new DOMParser();
  21. const doc = parser.parseFromString(text, "text/html");
  22. // 配点の書かれた table の取得
  23. const table = [...doc.querySelectorAll("#contest-statement > .lang > .lang-ja table")]
  24. .filter((element) => {
  25. const th = [...element.querySelectorAll("thead > tr > th")];
  26. return th.length === 2 && th[0].textContent === "問題" && th[1].textContent === "点数";
  27. });
  28. if (table.length !== 1) throw new Error("Scoreboard cannot be found.");
  29. return table[0];
  30. })
  31. .then((table) => {
  32. // table から配点を取り出し,ハイフンでつなぐ
  33. const res = [...table.querySelectorAll("tbody > tr > td")]
  34. .filter((element, index) => {
  35. return index % 2 === 1;
  36. })
  37. .map((element) => {
  38. return element.textContent;
  39. })
  40. .join(" - ");
  41. return res;
  42. });
  43.  
  44. // コンテスト名を配点に置き換える
  45. document.querySelector(".contest-title").textContent = res;
  46. })();