From 253efbc096a6eabb977cb5298da5dad9f704be30 Mon Sep 17 00:00:00 2001 From: ningenMe Date: Fri, 19 Apr 2024 02:13:12 +0900 Subject: [PATCH 1/6] prepare implicit difficulty circle logic --- .../src/components/ProblemLink.tsx | 97 +++++++++++-------- 1 file changed, 57 insertions(+), 40 deletions(-) diff --git a/atcoder-problems-frontend/src/components/ProblemLink.tsx b/atcoder-problems-frontend/src/components/ProblemLink.tsx index d18c4b5a1..260908f92 100644 --- a/atcoder-problems-frontend/src/components/ProblemLink.tsx +++ b/atcoder-problems-frontend/src/components/ProblemLink.tsx @@ -38,7 +38,7 @@ export const ProblemLink: React.FC = (props) => { ? `${problemIndex}. ${problemName}` : problemName; - const link = ( + const simpleLink = ( = (props) => { const difficulty = problemModel?.difficulty; if ( - !showDifficulty || + showDifficulty === undefined || problemModel === undefined || (difficulty === undefined && !showDifficultyUnavailable) ) { - return link; + return simpleLink; } const uniqueId = problemId + "-" + contestId; @@ -61,44 +61,61 @@ export const ProblemLink: React.FC = (props) => { const ratingColorClass = difficulty === undefined ? undefined : getRatingColorClass(difficulty); - return ( + const explicitDifficultyCircle = ( + + ); + const experimentalDifficultySymbol = ( <> - - {isExperimentalDifficulty ? ( - <> - - 🧪 - - setTooltipOpen(!tooltipOpen)} - > - This estimate is experimental. - - - ) : null} - { - // Don't add rel="noreferrer" to AtCoder links - // to allow AtCoder get the referral information. - // eslint-disable-next-line react/jsx-no-target-blank - - {problemTitle} - - } + + 🧪 + + setTooltipOpen(!tooltipOpen)} + > + This estimate is experimental. + ); + const difficultyColoredLink = ( + // Don't add rel="noreferrer" to AtCoder links + // to allow AtCoder get the referral information. + // eslint-disable-next-line react/jsx-no-target-blank + + {problemTitle} + + ); + + if (showDifficulty) { + return ( + <> + {explicitDifficultyCircle} + {isExperimentalDifficulty ? experimentalDifficultySymbol : null} + {difficultyColoredLink} + + ); + } else { + return ( + <> + {/* ここを、implicitにすればok */} + {explicitDifficultyCircle} + {isExperimentalDifficulty ? experimentalDifficultySymbol : null} + {simpleLink} + + ); + } }; From 0694658304a8843baa01461167ca8c68c076336e Mon Sep 17 00:00:00 2001 From: ningenMe Date: Fri, 19 Apr 2024 03:05:03 +0900 Subject: [PATCH 2/6] add show difficulty button --- .../src/components/ProblemLink.tsx | 73 +++++++++++++++---- 1 file changed, 57 insertions(+), 16 deletions(-) diff --git a/atcoder-problems-frontend/src/components/ProblemLink.tsx b/atcoder-problems-frontend/src/components/ProblemLink.tsx index 260908f92..a86dc0665 100644 --- a/atcoder-problems-frontend/src/components/ProblemLink.tsx +++ b/atcoder-problems-frontend/src/components/ProblemLink.tsx @@ -21,7 +21,17 @@ interface Props { } export const ProblemLink: React.FC = (props) => { - const [tooltipOpen, setTooltipOpen] = useState(false); + const [ + experimentalDifficultyTooltipOpen, + setExperimentalDifficultyTooltipOpen, + ] = useState(false); + const [implicitDifficultyClicked, setImplicitDifficultyClicked] = useState( + false + ); + const [ + implicitDifficultyTooltipOpen, + setImplicitDifficultyTooltipOpen, + ] = useState(false); const { contestId, @@ -58,16 +68,10 @@ export const ProblemLink: React.FC = (props) => { const uniqueId = problemId + "-" + contestId; const experimentalIconId = "experimental-" + uniqueId; + const implicitDifficultyIconId = "implicit-difficulty-" + uniqueId; const ratingColorClass = difficulty === undefined ? undefined : getRatingColorClass(difficulty); - const explicitDifficultyCircle = ( - - ); const experimentalDifficultySymbol = ( <> @@ -76,13 +80,42 @@ export const ProblemLink: React.FC = (props) => { setTooltipOpen(!tooltipOpen)} + isOpen={experimentalDifficultyTooltipOpen} + toggle={(): void => + setExperimentalDifficultyTooltipOpen( + !experimentalDifficultyTooltipOpen + ) + } > This estimate is experimental. ); + const implicitDifficultySymbol = ( + <> + + setImplicitDifficultyClicked(!implicitDifficultyClicked) + } + > + {"👉 "} + + + setImplicitDifficultyTooltipOpen(!implicitDifficultyTooltipOpen) + } + > + Show Difficulty. + + + ); + const difficultyColoredLink = ( // Don't add rel="noreferrer" to AtCoder links // to allow AtCoder get the referral information. @@ -99,22 +132,30 @@ export const ProblemLink: React.FC = (props) => { {problemTitle} ); + const difficultySymbol = ( + <> + + {isExperimentalDifficulty ? experimentalDifficultySymbol : null} + + ); if (showDifficulty) { return ( <> - {explicitDifficultyCircle} - {isExperimentalDifficulty ? experimentalDifficultySymbol : null} + {difficultySymbol} {difficultyColoredLink} ); } else { return ( <> - {/* ここを、implicitにすればok */} - {explicitDifficultyCircle} - {isExperimentalDifficulty ? experimentalDifficultySymbol : null} - {simpleLink} + {implicitDifficultySymbol} + {implicitDifficultyClicked ? difficultySymbol : null} + {implicitDifficultyClicked ? difficultyColoredLink : simpleLink} ); } From 27064bb979b4e9fbb1bdae9dbbc9162f3d1ed1b1 Mon Sep 17 00:00:00 2001 From: ningenMe Date: Fri, 19 Apr 2024 03:10:05 +0900 Subject: [PATCH 3/6] refactoring variable name --- .../src/components/ProblemLink.tsx | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/atcoder-problems-frontend/src/components/ProblemLink.tsx b/atcoder-problems-frontend/src/components/ProblemLink.tsx index a86dc0665..1ed99e180 100644 --- a/atcoder-problems-frontend/src/components/ProblemLink.tsx +++ b/atcoder-problems-frontend/src/components/ProblemLink.tsx @@ -25,12 +25,12 @@ export const ProblemLink: React.FC = (props) => { experimentalDifficultyTooltipOpen, setExperimentalDifficultyTooltipOpen, ] = useState(false); - const [implicitDifficultyClicked, setImplicitDifficultyClicked] = useState( + const [showDifficultySubClicked, setshowDifficultySubClicked] = useState( false ); const [ - implicitDifficultyTooltipOpen, - setImplicitDifficultyTooltipOpen, + showDifficultySubTooltipOpen, + setShowDifficultySubTooltipOpen, ] = useState(false); const { @@ -68,7 +68,7 @@ export const ProblemLink: React.FC = (props) => { const uniqueId = problemId + "-" + contestId; const experimentalIconId = "experimental-" + uniqueId; - const implicitDifficultyIconId = "implicit-difficulty-" + uniqueId; + const showDifficultySubIconId = "show-difficulty-sub-" + uniqueId; const ratingColorClass = difficulty === undefined ? undefined : getRatingColorClass(difficulty); @@ -91,24 +91,24 @@ export const ProblemLink: React.FC = (props) => { ); - const implicitDifficultySymbol = ( + const showDifficultySubSymbol = ( <> - setImplicitDifficultyClicked(!implicitDifficultyClicked) + setshowDifficultySubClicked(!showDifficultySubClicked) } > {"👉 "} - setImplicitDifficultyTooltipOpen(!implicitDifficultyTooltipOpen) + setShowDifficultySubTooltipOpen(!showDifficultySubTooltipOpen) } > Show Difficulty. @@ -153,9 +153,9 @@ export const ProblemLink: React.FC = (props) => { } else { return ( <> - {implicitDifficultySymbol} - {implicitDifficultyClicked ? difficultySymbol : null} - {implicitDifficultyClicked ? difficultyColoredLink : simpleLink} + {showDifficultySubSymbol} + {showDifficultySubClicked ? difficultySymbol : null} + {showDifficultySubClicked ? difficultyColoredLink : simpleLink} ); } From 1cf76fbf55e048753737805b19dac948400da334 Mon Sep 17 00:00:00 2001 From: ningenMe Date: Sat, 20 Apr 2024 05:32:47 +0900 Subject: [PATCH 4/6] change show difficulty mode from boolean into enum --- .../src/components/ProblemLink.tsx | 61 ++++++++----------- .../src/components/SubmissionListTable.tsx | 3 +- .../Internal/MyAccountPage/ResetProgress.tsx | 2 + .../ProblemCell.tsx | 3 +- .../ShowContest/ContestTable.tsx | 2 + .../ShowContest/LockoutContestTable/index.tsx | 2 + .../TrainingContestTable/SmallScoreCell.tsx | 2 + .../VirtualContest/ShowContest/index.tsx | 3 + .../src/pages/ListPage/ListTable.tsx | 3 +- .../pages/TablePage/AtCoderRegularTable.tsx | 5 +- .../src/pages/TablePage/ContestTable.tsx | 5 +- .../src/pages/TablePage/Options.tsx | 51 ++++++++++++---- .../src/pages/TablePage/index.tsx | 15 ++--- .../pages/TrainingPage/SingleCourseView.tsx | 7 ++- .../pages/UserPage/Recommendations/index.tsx | 3 +- .../src/utils/LocalStorage.tsx | 1 + .../src/utils/ShowDifficultyMode.ts | 5 ++ 17 files changed, 112 insertions(+), 61 deletions(-) create mode 100644 atcoder-problems-frontend/src/utils/ShowDifficultyMode.ts diff --git a/atcoder-problems-frontend/src/components/ProblemLink.tsx b/atcoder-problems-frontend/src/components/ProblemLink.tsx index 1ed99e180..80cee8703 100644 --- a/atcoder-problems-frontend/src/components/ProblemLink.tsx +++ b/atcoder-problems-frontend/src/components/ProblemLink.tsx @@ -4,6 +4,7 @@ import * as Url from "../utils/Url"; import { getRatingColorClass } from "../utils"; import ProblemModel from "../interfaces/ProblemModel"; import { RatingInfo } from "../utils/RatingInfo"; +import { ShowDifficultyMode } from "../utils/ShowDifficultyMode"; import { DifficultyCircle } from "./DifficultyCircle"; import { NewTabLink } from "./NewTabLink"; @@ -13,7 +14,7 @@ interface Props { contestId: string; problemIndex?: string; problemName: string; - showDifficulty?: boolean; + showDifficultyMode: ShowDifficultyMode; isExperimentalDifficulty?: boolean; showDifficultyUnavailable?: boolean; problemModel?: ProblemModel | null; @@ -28,17 +29,13 @@ export const ProblemLink: React.FC = (props) => { const [showDifficultySubClicked, setshowDifficultySubClicked] = useState( false ); - const [ - showDifficultySubTooltipOpen, - setShowDifficultySubTooltipOpen, - ] = useState(false); const { contestId, problemId, problemIndex, problemName, - showDifficulty, + showDifficultyMode, isExperimentalDifficulty, showDifficultyUnavailable, problemModel, @@ -59,7 +56,6 @@ export const ProblemLink: React.FC = (props) => { const difficulty = problemModel?.difficulty; if ( - showDifficulty === undefined || problemModel === undefined || (difficulty === undefined && !showDifficultyUnavailable) ) { @@ -93,26 +89,20 @@ export const ProblemLink: React.FC = (props) => { ); const showDifficultySubSymbol = ( <> - setshowDifficultySubClicked(!showDifficultySubClicked) } + style={{ + border: "none", + background: "transparent", + }} > {"👉 "} - - - setShowDifficultySubTooltipOpen(!showDifficultySubTooltipOpen) - } - > - Show Difficulty. - + ); @@ -143,20 +133,23 @@ export const ProblemLink: React.FC = (props) => { ); - if (showDifficulty) { - return ( - <> - {difficultySymbol} - {difficultyColoredLink} - - ); - } else { - return ( - <> - {showDifficultySubSymbol} - {showDifficultySubClicked ? difficultySymbol : null} - {showDifficultySubClicked ? difficultyColoredLink : simpleLink} - - ); + switch (showDifficultyMode) { + case ShowDifficultyMode.None: + return <>{simpleLink}; + case ShowDifficultyMode.Full: + return ( + <> + {difficultySymbol} + {difficultyColoredLink} + + ); + case ShowDifficultyMode.Sub: + return ( + <> + {showDifficultySubSymbol} + {showDifficultySubClicked ? difficultySymbol : null} + {showDifficultySubClicked ? difficultyColoredLink : simpleLink} + + ); } }; diff --git a/atcoder-problems-frontend/src/components/SubmissionListTable.tsx b/atcoder-problems-frontend/src/components/SubmissionListTable.tsx index 4187227ef..9076294ef 100644 --- a/atcoder-problems-frontend/src/components/SubmissionListTable.tsx +++ b/atcoder-problems-frontend/src/components/SubmissionListTable.tsx @@ -7,6 +7,7 @@ import { formatMomentDateTime, parseSecond } from "../utils/DateUtil"; import { isAccepted } from "../utils"; import * as Url from "../utils/Url"; import { RatingInfo } from "../utils/RatingInfo"; +import { ShowDifficultyMode } from "../utils/ShowDifficultyMode"; import { ProblemLink } from "./ProblemLink"; import { ListPaginationPanel, @@ -130,7 +131,7 @@ export const SubmissionListTable: React.FC = (props) => { isExperimentalDifficulty={ problemModels?.get(problem_id)?.is_experimental } - showDifficulty={true} + showDifficultyMode={ShowDifficultyMode.Full} problemId={problem_id} problemIndex={problemIndexMap.get(problem_id) || ""} problemName={name || ""} diff --git a/atcoder-problems-frontend/src/pages/Internal/MyAccountPage/ResetProgress.tsx b/atcoder-problems-frontend/src/pages/Internal/MyAccountPage/ResetProgress.tsx index 4cf20a117..73bba2aa8 100644 --- a/atcoder-problems-frontend/src/pages/Internal/MyAccountPage/ResetProgress.tsx +++ b/atcoder-problems-frontend/src/pages/Internal/MyAccountPage/ResetProgress.tsx @@ -6,6 +6,7 @@ import { ProblemSearchBox } from "../../../components/ProblemSearchBox"; import { ProblemLink } from "../../../components/ProblemLink"; import { formatMomentDateTime, parseSecond } from "../../../utils/DateUtil"; import { useProgressResetList } from "../../../api/InternalAPIClient"; +import { ShowDifficultyMode } from "../../../utils/ShowDifficultyMode"; import { addResetProgress, deleteResetProgress } from "./ApiClient"; export const ResetProgress: React.FC = () => { @@ -50,6 +51,7 @@ export const ResetProgress: React.FC = () => { {problem ? ( = ({ contestId={problem.contest_id} problemIndex={problem.problem_index} problemName={problem.name} - showDifficulty={true} + showDifficultyMode={ShowDifficultyMode.Full} problemModel={problemModel} isExperimentalDifficulty={problemModel?.is_experimental} /> diff --git a/atcoder-problems-frontend/src/pages/Internal/VirtualContest/ShowContest/ContestTable.tsx b/atcoder-problems-frontend/src/pages/Internal/VirtualContest/ShowContest/ContestTable.tsx index 59d8f8f0d..0112befeb 100644 --- a/atcoder-problems-frontend/src/pages/Internal/VirtualContest/ShowContest/ContestTable.tsx +++ b/atcoder-problems-frontend/src/pages/Internal/VirtualContest/ShowContest/ContestTable.tsx @@ -23,6 +23,7 @@ import { makeBotRunners, } from "../../../../utils/RatingSystem"; import { VirtualContestItem, VirtualContestProblem } from "../../types"; +import { ShowDifficultyMode } from "../../../../utils/ShowDifficultyMode"; import { ContestTableRow } from "./ContestTableRow"; import { FirstAcceptanceRow } from "./FirstAcceptanceRow"; import { @@ -260,6 +261,7 @@ export const ContestTable = (props: Props) => { {p.contestId && p.title ? ( = (props) => { {problem.title && problem.contestId ? ( = (props) => {
{problem.contestId && problem.title ? ( {p.contestId && p.title ? ( {p.contestId && p.title ? ( = (props) => { dataFormat: function DataFormat(_, row): React.ReactElement { return ( ; hideCompletedContest: boolean; - showDifficulty: boolean; + showDifficultyMode: ShowDifficultyMode; colorMode: ColorMode; title: string; statusLabelMap: Map; @@ -181,7 +182,7 @@ const AtCoderRegularTableSFC: React.FC = (props) => { !!model && model.is_experimental } showDifficultyUnavailable - showDifficulty={props.showDifficulty} + showDifficultyMode={props.showDifficultyMode} contestId={contest.id} problemId={problem.problem.id} problemIndex={problem.problem.problem_index} diff --git a/atcoder-problems-frontend/src/pages/TablePage/ContestTable.tsx b/atcoder-problems-frontend/src/pages/TablePage/ContestTable.tsx index 1144a4219..92268a0c5 100644 --- a/atcoder-problems-frontend/src/pages/TablePage/ContestTable.tsx +++ b/atcoder-problems-frontend/src/pages/TablePage/ContestTable.tsx @@ -11,12 +11,13 @@ import { SubmitTimespan } from "../../components/SubmitTimespan"; import { RatingInfo } from "../../utils/RatingInfo"; import { isRatedContest } from "../../utils/ContestClassifier"; import { ProblemPoint } from "../../components/Problempoint"; +import { ShowDifficultyMode } from "../../utils/ShowDifficultyMode"; interface Props { contests: Contest[]; contestToProblems: Map; hideCompletedContest: boolean; - showDifficulty: boolean; + showDifficultyMode: ShowDifficultyMode; colorMode: ColorMode; statusLabelMap: Map; showPenalties: boolean; @@ -118,7 +119,7 @@ export const ContestTable: React.FC = (props) => { contest, problemInfo.length )} - showDifficulty={props.showDifficulty} + showDifficultyMode={props.showDifficultyMode} problemId={problem.id} contestId={contest.id} problemIndex={problem.problem_index} diff --git a/atcoder-problems-frontend/src/pages/TablePage/Options.tsx b/atcoder-problems-frontend/src/pages/TablePage/Options.tsx index 7106b11e6..81737ec38 100644 --- a/atcoder-problems-frontend/src/pages/TablePage/Options.tsx +++ b/atcoder-problems-frontend/src/pages/TablePage/Options.tsx @@ -14,12 +14,13 @@ import { } from "reactstrap"; import { HelpBadgeTooltip } from "../../components/HelpBadgeTooltip"; import { ColorMode } from "../../utils/TableColor"; +import { ShowDifficultyMode } from "../../utils/ShowDifficultyMode"; interface Props { hideCompletedContest: boolean; toggleHideCompletedContest: () => void; - showDifficulties: boolean; - toggleShowDifficulties: () => void; + showDifficultyMode: ShowDifficultyMode; + setShowDifficultyMode: (showDifficultyMode: ShowDifficultyMode) => void; colorMode: ColorMode; setColorMode: (colorMode: ColorMode) => void; showPenalties: boolean; @@ -46,16 +47,44 @@ export const Options: React.FC = (props) => { /> + + + { + { + [ShowDifficultyMode.None]: "None", + [ShowDifficultyMode.Full]: "Full", + [ShowDifficultyMode.Sub]: "Sub", + }[props.showDifficultyMode] + } + + + Show Difficulty Mode + + props.setShowDifficultyMode(ShowDifficultyMode.None) + } + > + None + + + props.setShowDifficultyMode(ShowDifficultyMode.Full) + } + > + Full + + + props.setShowDifficultyMode(ShowDifficultyMode.Sub) + } + > + Sub + + + - +   + Show Difficulty   Internal rating to have 50% Solve Probability diff --git a/atcoder-problems-frontend/src/pages/TablePage/index.tsx b/atcoder-problems-frontend/src/pages/TablePage/index.tsx index e1c899941..dfa1655ca 100644 --- a/atcoder-problems-frontend/src/pages/TablePage/index.tsx +++ b/atcoder-problems-frontend/src/pages/TablePage/index.tsx @@ -22,6 +22,7 @@ import { ContestCategory, } from "../../utils/ContestClassifier"; import { getLikeContestCategory } from "../../utils/LikeContestUtils"; +import { ShowDifficultyMode } from "../../utils/ShowDifficultyMode"; import { TableTabButtons } from "./TableTab"; import { Options } from "./Options"; import { ContestTable } from "./ContestTable"; @@ -41,9 +42,9 @@ export const TablePage: React.FC = (props) => { "hideCompletedContest", false ); - const [showDifficulty, setShowDifficulty] = useLocalStorage( - "showDifficulty", - true + const [showDifficultyMode, setShowDifficultyMode] = useLocalStorage( + "showDifficultyMode", + ShowDifficultyMode.None ); const [colorMode, setColorMode] = useLocalStorage( "colorMode", @@ -104,8 +105,8 @@ export const TablePage: React.FC = (props) => { toggleHideCompletedContest={(): void => setHideCompletedContest(!hideCompletedContest) } - showDifficulties={showDifficulty} - toggleShowDifficulties={(): void => setShowDifficulty(!showDifficulty)} + showDifficultyMode={showDifficultyMode} + setShowDifficultyMode={setShowDifficultyMode} colorMode={colorMode} setColorMode={setColorMode} showPenalties={showPenalties} @@ -135,7 +136,7 @@ export const TablePage: React.FC = (props) => { "PAST", ].includes(activeTab) ? ( = (props) => { /> ) : ( = (props) => { contestId={problem.contest_id} problemModel={model} isExperimentalDifficulty={!!model && model.is_experimental} - showDifficulty={submission !== undefined} + showDifficultyMode={ + submission !== undefined + ? ShowDifficultyMode.Full + : ShowDifficultyMode.None + } showDifficultyUnavailable /> diff --git a/atcoder-problems-frontend/src/pages/UserPage/Recommendations/index.tsx b/atcoder-problems-frontend/src/pages/UserPage/Recommendations/index.tsx index 9c556870e..9fe27a6ea 100644 --- a/atcoder-problems-frontend/src/pages/UserPage/Recommendations/index.tsx +++ b/atcoder-problems-frontend/src/pages/UserPage/Recommendations/index.tsx @@ -34,6 +34,7 @@ import { getLastSolvedTimeMap, getMaximumExcludeElapsedSecond, } from "../../../utils/LastSolvedTime"; +import { ShowDifficultyMode } from "../../../utils/ShowDifficultyMode"; import { recommendProblems } from "./RecommendProblems"; import { RecommendController, RecommendOption } from "./RecommendController"; @@ -162,7 +163,7 @@ export const Recommendations = (props: Props) => { ): React.ReactElement => ( Date: Sat, 20 Apr 2024 05:37:35 +0900 Subject: [PATCH 5/6] refactor --- .../src/components/ProblemLink.tsx | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/atcoder-problems-frontend/src/components/ProblemLink.tsx b/atcoder-problems-frontend/src/components/ProblemLink.tsx index 80cee8703..50b8b3d7e 100644 --- a/atcoder-problems-frontend/src/components/ProblemLink.tsx +++ b/atcoder-problems-frontend/src/components/ProblemLink.tsx @@ -22,10 +22,7 @@ interface Props { } export const ProblemLink: React.FC = (props) => { - const [ - experimentalDifficultyTooltipOpen, - setExperimentalDifficultyTooltipOpen, - ] = useState(false); + const [tooltipOpen, setTooltipOpen] = useState(false); const [showDifficultySubClicked, setshowDifficultySubClicked] = useState( false ); @@ -76,12 +73,8 @@ export const ProblemLink: React.FC = (props) => { - setExperimentalDifficultyTooltipOpen( - !experimentalDifficultyTooltipOpen - ) - } + isOpen={tooltipOpen} + toggle={(): void => setTooltipOpen(!tooltipOpen)} > This estimate is experimental. From 4215ac9d8c9c9695724255f8d167fa0cb6500159 Mon Sep 17 00:00:00 2001 From: ningenMe Date: Sat, 20 Apr 2024 05:49:27 +0900 Subject: [PATCH 6/6] refactor --- atcoder-problems-frontend/src/pages/TablePage/Options.tsx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/atcoder-problems-frontend/src/pages/TablePage/Options.tsx b/atcoder-problems-frontend/src/pages/TablePage/Options.tsx index 81737ec38..132c6edc4 100644 --- a/atcoder-problems-frontend/src/pages/TablePage/Options.tsx +++ b/atcoder-problems-frontend/src/pages/TablePage/Options.tsx @@ -83,9 +83,7 @@ export const Options: React.FC = (props) => { -   - Show Difficulty -   +   Show Difficulty   Internal rating to have 50% Solve Probability