feat(stats): mastery-path ceilingP + effectiveTarget — 고난이도 문제에도 희망 카피

- stats.service.ts: ceilingP = σ(k·(1-D)) 계산. 이 문제의 이론적 P 상한.
  effectiveTarget = min(targetP, ceilingP - 0.02) 로 좁혀서 실제 도달 가능한
  현실적 목표를 쓴다. 응답에 ceilingP/effectiveTarget 추가.
- api.ts: MasteryPathResponse 에 두 필드 추가.
- stats/page.tsx: capped 인 경우 '이 난이도의 한계는 X% 야. N회차 K일 뒤 그
  한계 근처에 도달해' 카피 + 목표 배지에 '(한계)' 표시.
- MasteryPathChart: 기준선을 effectiveTarget 으로.
This commit is contained in:
reloop
2026-04-12 01:13:55 +09:00
parent 9939f299d8
commit f22f837fe2
4 changed files with 32 additions and 9 deletions

View File

@@ -65,11 +65,11 @@ export default function MasteryPathChart({ data }: Props) {
}}
/>
<ReferenceLine
y={Math.round(data.targetP * 100)}
y={Math.round(data.effectiveTarget * 100)}
stroke={theme.color.success}
strokeDasharray="5 5"
label={{
value: `목표 ${Math.round(data.targetP * 100)}%`,
value: `목표 ${Math.round(data.effectiveTarget * 100)}%`,
fill: theme.color.success,
fontSize: 10,
position: 'insideTopRight',