Skip to content

Instantly share code, notes, and snippets.

@mikecat
Created March 17, 2025 15:37
Show Gist options
  • Select an option

  • Save mikecat/718c922934bc933b29fe8922c3fb0d45 to your computer and use it in GitHub Desktop.

Select an option

Save mikecat/718c922934bc933b29fe8922c3fb0d45 to your computer and use it in GitHub Desktop.
AtCoder でAC・挑戦した問題を手動でメモして AtCoder Problems 上に表示する Greasemonkey 用ユーザースクリプト

これは何?

AtCoder Problems にACした問題の情報が反映されなくなったようなので、手動でACした問題を記録して表示する用のユーザースクリプトです。

ポイント

  • AtCoder Problems に情報が反映された際にわかるよう、公式の色とは色を変えています。
  • 問題の情報はユーザースクリプト内に問題のURLを埋め込んで記録します。

注意点

  • 無許可・無保証です。将来の AtCoder Problems の仕様変更などにより使えなくなる可能性があります。
  • メモのし忘れ・間違い・消失などによる損害を含め、使用した・または使用しなかったため発生した一切の損害について、作者は責任を負いません。

ライセンス

CC0 1.0 https://creativecommons.org/publicdomain/zero/1.0/deed.ja

// ==UserScript==
// @name AtCoderでAC・提出した問題メモ
// @description AtCoderでAC・提出した問題を(手動で)メモする
// @include https://kenkoooo.com/atcoder/*
// @version 1.0.0
// @grant none
// ==/UserScript==
// 問題のURLの例:https://atcoder.jp/contests/abc393/tasks/abc393_a
// ACした問題のURLのリスト
const acUrlList = [
"https://atcoder.jp/contests/abc394/tasks/abc394_a", // https://atcoder.jp/contests/abc394/submissions/63893098
"https://atcoder.jp/contests/abc393/tasks/abc393_d", // https://atcoder.jp/contests/abc393/submissions/63898263
];
// ACしていないが提出した問題のURLのリスト
const attemptedUrlList = [
];
// -----------
function generateMarker(color) {
const div = document.createElement("div");
div.style.position = "absolute";
div.style.left = "0";
div.style.top = "0";
div.style.width = "100%";
div.style.height = "100%";
div.style.background = `linear-gradient(to bottom right, ${color}, transparent)`; // TODO:エスケープする
div.style.zIndex = "1";
div.style.opacity = "0.5";
div.style.pointerEvents = "none";
return div;
}
function mark(url, color) {
const links = document.querySelectorAll(`.table-problem a[href="${url}"]:not(.marked)`); // TODO:エスケープする
links.forEach((link) => {
const cell = link.parentElement;
if (cell) {
cell.appendChild(generateMarker(color));
link.classList.add("marked");
}
});
}
window.setInterval(() => {
acUrlList.forEach((url) => mark(url, "deepskyblue"));
attemptedUrlList.forEach((url) => mark(url, "darksalmon"));
}, 1000);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment