(主に高難易度の)difficultyが表示されない
以前はAC数が1以上の問題についてはdifficultyに対応する色が表示され、0のものは?が表示されていたと思うのですが、現在はいくつかの問題についてdifficultyが表示されていません
高難易度の問題が中心ですが、中にはABC227Gなど黄diffで表示されないものもあります
以前の表示
現在の表示
私は少なくとも1人が通過する問題のすべての難易度を表示することを提案しますが、「難易度が使用できない部分」は無視することができます。
Webソースコードを直接見ることもできます
現状 difficulty が表示されていない問題について、https://kenkoooo.com/atcoder/resources/problem-models.json を確認したところ、
-
difficultyは数値として記録されている - 一方で、
slope,intercept,varianceがnullになっている
という特徴が見られました。 最初に例として挙げられている ABC227-G だけでなく、最近の ABC428-G などについても同様です。
また、atcoder-problems-frontend/src/interfaces/ProblemModel.ts の isProblemModelWithDifficultyModel 関数は数年前から変更されておらず、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 が入ってしまっているのかまでは外部から把握するのは難しいと考えています。
対応方針として
- JSON 側で、回帰に失敗した場合は
slope,intercept,varianceのキー自体を出力しないように変更する - フロントエンドの
isProblemModelWithDifficultyModel/isProblemModelWithTimeModelなどについて、nullもオプショナルな値として許容するように変更する
のどちらか(あるいは両方)が考えられます。
後者の変更であればそのまま PR を用意することもできると思いますが、どの方針を取るかは先に議論するべきであると考えています。