sataniC++

C++、競プロ、数学などについて色々考えたりします。

AtCoderResultNotifier - AtCoderの提出結果を通知するUserScriptを作成しました

beta版AtCoderサイトにおいて,Waiting Judgeとなっていた提出の結果を通知するUserScriptを作成しました.
その名もAtCoderResultNotifierです.

f:id:satanic0258:20180816083317g:plain
動作イメージ

注意事項

インストールの前に注意すべきことをいくつか述べておきます.

  • AtCoder側の仕様変更によって動作しなくなる可能性があります.
    もし使えなくなった場合や,その他予期せぬ動作をするなどがあった場合はTwitterでリプ等頂ければ対応します.

(コンテストでの使用は自己責任でお願いします!)

インストール方法

  1. お使いのブラウザでTampermonkeyをインストールします
    (その他UserScriptマネージャーでも動作するはずですが未確認です)
  2. このリンクからAtCoderResultNotifierをインストールします

[2018-08-17 追記] AtCoderResultNotifier_WJCollecter は AtCoderResultNotifier にマージされました.お手数ですがお使いのUserScriptマネージャより AtCoderResultNotifier_WJCollecter を削除してください.

これでインストール完了です.
正しくインストールされていれば,beta版AtCoderサイトでソートコードを提出して少し待つとACやWAなどの通知がポップアップされるはずです.

仕様など

  • WJとなった提出を提出一覧から取得し,beta.atcoder.jp以下で通知を行います.
  • 通知ウィンドウをクリックするとその通知を消すことが出来ます.
  • WJとなっている提出情報はlocalStorage(ブラウザ側)に保存されます.
    (そのため各コンテストごとにドメインが異なる旧サイトでは難しいです…)
  • 提出一覧での表示が[WJ],[処理ケース数/全ケース数],[WR]のときWJとして以降確認を行い,それ以外の場合は通知を行います.
    (そのため[1/10 TLE]などの時点で通知を行いますが,最終的に[WA]である可能性もあります)
  • WJである提出を確認する間隔は3.5秒です.
    (beta版AtCoderの提出一覧ページと同じ)
  • WJである提出の現在のジャッジ状況を調べるときは公式で用意されているjsonを叩いています.
  • WJのデータがない場合はjsonを取得しにいかないためサーバーへの負荷も抑えられているはずです.
  • WJのデータを保持しておく期間は10分です.
    (提出から結果が出るまで10分以上はかからないはず…)
  • 最後にアクティブになったウィンドウでのみ通知を行います.
    また,非アクティブになってから動作し続ける期間は5分です.

今後の予定?

  • 質問も通知する機能 … 区別のために表示方法を変えて提示すると良いかも
  • 部分点への対応 … 部分点があるコンテストにおいて,WAだが部分点を得ている場合の表示などをしっかり
  • 通知ウィンドウの表示方法の調整 … 現状では問題文と被ってしまうため,それが邪魔になる場合は画面最上部など邪魔にならない位置へ移動するなど
  • AtCoderサイトへの対応 … ただlocalStorageはドメインごとに保存するためコンテスト間を超えての通知は難しい,ドメイン間を超えて動作も出来るがセキュリティ上問題があるかも

  ↑の対応(結構特殊ケースなので対応するかは微妙なところ)

最後に

Twitterでアドバイスをくださったtatsumackさん,chokudaiさんありがとうございます!
JavaScriptの知識が全然ないまま見よう見まねで作ってみたクオリティなので,もしかしたらコードを見て「ここはこう書くともっとシンプルだよ!」「その関数は古いからコレを使うといいよ!」などあるかもしれません.
その時は是非ご教授ください><
その他改善案などもTwitter等でリプを下さるとうれしいです!

University CodeSprint 4 - Magic value

University CodeSprint 4にて50位でパーカーゲットしました!
しかし,題にもある"Magic value"という問題が解けず….

そこで復習したところ得られた知見も多かったため,スライドにまとめました.
(とはいってもEditorialと言ってることはほぼ同じです)

なお,他の問題についてはここに簡単な解法を書いてあるのでそちらを参照してみてください.
(リクエストがあったら別記事を作るかもしれません)

Magic value

問題文

コード

コメント

ans_minはGCDの性質をうまく利用する,
ans_maxはConvex-Hull Trickを遅延セグ木上で展開する,という部分がポイントでした.

ちなみに,「Convex-Hull Trickを遅延セグ木上で展開する」というのは簡単に調べたところLi Chao treeと呼ばれているものに近い気がします(?).


次回も100位以内を目指します!

World CodeSprint 12 雑多解説

World CodeSprint 12にて,ついにコンテスト中全完してパーカーゲットしました!
嬉しい勢いで解説記事を簡単に書いておきます.

なお,コンテスト中に個人slackで書いてたやつのコピペなので,結構適当だったり微妙に間違ってたりするかもしれないのでそこはご了承ください.(いつかちゃんと書くことがある…かも?)


テンプレが長いので初めに示して,問題解説では主要部分だけ書いておきます.
(マクロ多いので見づらいですが,REP,RREP,FOR,RFORはfor関係,VAR,VEC,VEC_ROWあたりは入力関係,OUT,SP,BRは出力関係です)

続きを読む