feat: show 99.5 percent score achievement probability
Publish GitHub Pages output / publish (push) Successful in 35s
Publish GitHub Pages output / publish (push) Successful in 35s
This commit is contained in:
@@ -877,7 +877,7 @@
|
||||
return structuredClone({ collection: value.collection ?? {}, memberBoards: value.memberBoards ?? {}, boardCards: value.boardCards ?? {}, memoryCount: value.memoryCount ?? 0, memberPowerUpPercent: value.memberPowerUpPercent ?? 0 });
|
||||
}
|
||||
|
||||
async function evaluateHistory(settings: AnalysisSettings, growth: GrowthSnapshot): Promise<{ result: ExactOptimizationResult; overallPower: number }> {
|
||||
async function evaluateHistory(settings: AnalysisSettings, growth: GrowthSnapshot, includeAchievementProbabilities = false): Promise<{ result: ExactOptimizationResult; overallPower: number; achievementProbabilities?: ScoreAchievementProbabilities }> {
|
||||
const chartSummary = charts.find((chart) => chart.songId === settings.songId && chart.difficulty === settings.difficulty);
|
||||
if (!chartSummary) throw new Error('현재 공개된 악곡 데이터에서 저장한 곡을 찾을 수 없습니다.');
|
||||
const sources = settings.cardIds.map((id) => {
|
||||
@@ -908,10 +908,10 @@
|
||||
const finish = () => { comparisonWorker.terminate(); comparisonWorkers.delete(comparisonWorker); };
|
||||
comparisonWorker.onerror = () => { finish(); reject(new Error('성장 비교 작업을 실행하지 못했습니다.')); };
|
||||
comparisonWorker.onmessage = (event) => {
|
||||
if (event.data.type === 'result') { finish(); resolve({ result: event.data.result, overallPower: power.overallPower }); }
|
||||
if (event.data.type === 'result') { finish(); resolve({ result: event.data.result, overallPower: power.overallPower, achievementProbabilities: event.data.achievementProbabilities }); }
|
||||
if (event.data.type === 'error') { finish(); reject(new Error(event.data.message)); }
|
||||
};
|
||||
comparisonWorker.postMessage({ type: 'optimize-exact', cards, chart, perfectNoteScore: perfectNoteScoreFromPower(power.overallPower, chartSummary.scoreRatio), directSongScoreBonusPercent: effects.directSongScoreBonusPercent });
|
||||
comparisonWorker.postMessage({ type: 'optimize-exact', cards, chart, perfectNoteScore: perfectNoteScoreFromPower(power.overallPower, chartSummary.scoreRatio), directSongScoreBonusPercent: effects.directSongScoreBonusPercent, includeAchievementProbabilities });
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1160,10 +1160,11 @@
|
||||
{#if !simulatedResult && (mode === 'analysis' || achievementProbabilities)}
|
||||
<div class="probability-grid">
|
||||
<div><span>최고점 100%</span><strong>{probabilityLabel(achievementProbabilities?.maximum)}</strong></div>
|
||||
<div><span>최고점의 99.5% 이상</span><strong>{probabilityLabel(achievementProbabilities?.atLeast995Percent)}</strong><small>{scoreThreshold(result.theoreticalMaxScore, 0.995)}점 이상</small></div>
|
||||
<div><span>최고점의 99% 이상</span><strong>{probabilityLabel(achievementProbabilities?.atLeast99Percent)}</strong><small>{scoreThreshold(result.theoreticalMaxScore, 0.99)}점 이상</small></div>
|
||||
<div><span>최고점의 95% 이상</span><strong>{probabilityLabel(achievementProbabilities?.atLeast95Percent)}</strong><small>{scoreThreshold(result.theoreticalMaxScore, 0.95)}점 이상</small></div>
|
||||
</div>
|
||||
<p class="probability-guide">모든 노트를 PERFECT로 처리한다고 가정하고 액티브 발동 확률만 반영합니다. 100%는 정확 계산, 99%·95% 이상은 25,000회 반복 계산값이며 최고점에 영향을 주지 않는 발동 실패는 100% 달성 확률을 낮추지 않습니다.</p>
|
||||
<p class="probability-guide">모든 노트를 PERFECT로 처리한다고 가정하고 액티브 발동 확률만 반영합니다. 100%는 정확 계산, 99.5%·99%·95% 이상은 25,000회 반복 계산값이며 최고점에 영향을 주지 않는 발동 실패는 100% 달성 확률을 낮추지 않습니다.</p>
|
||||
{/if}
|
||||
|
||||
<section class="connection-optimizer" aria-labelledby="connection-optimizer-title">
|
||||
@@ -1418,7 +1419,7 @@
|
||||
.score-summary { display: grid; gap: 7px; padding: 16px; border-radius: 10px; background: #22202a; }
|
||||
.score-summary span { color: #a9b1be; font-size: 14px; }
|
||||
.score-summary strong { color: #f2a3c4; font-size: 20px; }
|
||||
.probability-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-top: 8px; }
|
||||
.probability-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 180px), 1fr)); gap: 8px; margin-top: 8px; }
|
||||
.probability-grid > div { display: grid; gap: 7px; padding: 16px; border: 1px solid #303744; border-radius: 10px; background: #171d25; }
|
||||
.probability-grid span { color: #9ca5b3; font-size: 14px; }
|
||||
.probability-grid strong { color: #e5e9ef; font-size: 20px; }
|
||||
|
||||
Reference in New Issue
Block a user