AtCoderProblems icon indicating copy to clipboard operation
AtCoderProblems copied to clipboard

(主に高難易度の)difficultyが表示されない

Open yokoyama-midori opened this issue 6 months ago • 3 comments

以前はAC数が1以上の問題についてはdifficultyに対応する色が表示され、0のものは?が表示されていたと思うのですが、現在はいくつかの問題についてdifficultyが表示されていません

高難易度の問題が中心ですが、中にはABC227Gなど黄diffで表示されないものもあります

以前の表示 Image

現在の表示 Image

yokoyama-midori avatar Jul 22 '25 08:07 yokoyama-midori

私は少なくとも1人が通過する問題のすべての難易度を表示することを提案しますが、「難易度が使用できない部分」は無視することができます。

include13 avatar Aug 02 '25 03:08 include13

Webソースコードを直接見ることもできます

include13 avatar Aug 04 '25 08:08 include13

現状 difficulty が表示されていない問題について、https://kenkoooo.com/atcoder/resources/problem-models.json を確認したところ、

  • difficulty は数値として記録されている
  • 一方で、slope, intercept, variancenull になっている

という特徴が見られました。 最初に例として挙げられている ABC227-G だけでなく、最近の ABC428-G などについても同様です。

また、atcoder-problems-frontend/src/interfaces/ProblemModel.tsisProblemModelWithDifficultyModel 関数は数年前から変更されておらず、slope / intercept

  • プロパティとして存在しない(Object.prototype.hasOwnProperty.call 関数が false を返す)
  • または number / undefined

であれば valid なモデルとして判定され、それ以外であれば invalid なモデルとして判定されるようです。 null が入っていても Object.prototype.hasOwnProperty.call 関数は true を返すため、これでは ABC227-G や ABC428-G などのモデルは invalid なモデルと判定されていると考えられます。 slope / intercept が定義できない場合に undefined とする仕様であろうことは、ソースコードの他のファイルからも読み取れます。

ただし、今年の本番環境の修正は master ブランチには反映されていないと思われることから、なぜ null が入ってしまっているのかまでは外部から把握するのは難しいと考えています。

対応方針として

  1. JSON 側で、回帰に失敗した場合は slope, intercept, variance のキー自体を出力しないように変更する
  2. フロントエンドの isProblemModelWithDifficultyModel / isProblemModelWithTimeModel などについて、null もオプショナルな値として許容するように変更する

のどちらか(あるいは両方)が考えられます。

後者の変更であればそのまま PR を用意することもできると思いますが、どの方針を取るかは先に議論するべきであると考えています。

NotLeonian avatar Nov 25 '25 16:11 NotLeonian