배치 분석 · 홀로도리 계산기
01

분석 조건

{candidateCount.toLocaleString('ko-KR')}개 후보
result = null} />
자동 계산 종합력{overallPower.toLocaleString('ko-KR')}
길이 {selectedChart?.durationSeconds ?? 0}초 노트 {selectedChart?.totalNotes?.toLocaleString('ko-KR') ?? 0}개 기본 1노트 {Math.ceil(perfectNoteScore).toLocaleString('ko-KR')}점 · {scoreCalibrationLabel} {#if boardEffects.directSongScoreBonusPercent > 0 || songScoreBonusOverride !== null} 가창 보너스 {boardEffects.directSongScoreBonusPercent}%{songScoreBonusOverride === null ? '' : ' · 덮어쓰기'} {/if} 인게임 1노트 {inGamePerfectNoteScore.toLocaleString('ko-KR')}점

인게임 1노트는 일반 PERFECT 기준으로 가창 보너스를 반영한 점수입니다. 스킬·콤보 보너스는 제외하며, 기본점수의 소수점을 유지해 보너스를 적용한 뒤 올림합니다.

{#each selectedCardIds as selectedId, slot}
{selectedAwakenings[slot]}
{#each REDUCTION_LOCK_OPTIONS as reduction} {/each}
updateGenerationBonus(slot, sanitizeGenerationBonusInput(event.currentTarget, generationBonusOverrides[slot] ?? null))}>
{/each}

‘파란 노드 전체’를 사용하지 않으면 사용자 데이터에 저장된 해당 멤버의 보드를 사용합니다. 기수 보너스와 가창 보너스 덮어쓰기는 빈칸이면 실제 보드 수치를 사용하고, 숫자를 입력하면 해당 값으로 대체합니다.

리더 의상 효과

{leaderOutfitDescription || '적용할 수 있는 의상이 없습니다.'}

최대 레벨 기준 · 기본 {unitPower.baseParameterTotal.toLocaleString('ko-KR')} + 개화 {unitPower.potentialTotal.toLocaleString('ko-KR')} + 패시브 {unitPower.passiveTotal.toLocaleString('ko-KR')} + 의상 {unitPower.outfitTotal.toLocaleString('ko-KR')} + 보드 {unitPower.boardTotal.toLocaleString('ko-KR')} + 메모리 {unitPower.memoryTotal.toLocaleString('ko-KR')} ({memoryCount}개) + 멤버 강화 {unitPower.memberPowerUpTotal.toLocaleString('ko-KR')} ({memberPowerUpPercent.toLocaleString('ko-KR')}%)

{#if errorMessage}{/if} {#if running}{/if}
02

분석 결과

{#if result}

추천 스페셜 발동 순서

    {#each result.order as cardId, slot}
  1. {slot + 1}{resultCardName(cardId)}쿨타임 {result.cooldownReductions[cardId]}% 감소
  2. {/each}
예상 점수{result.expectedScore.toLocaleString('ko-KR')}
이론상 고점{result.theoreticalMaxScore.toLocaleString('ko-KR')}
스킬 미발동 기준{result.baselineScore.toLocaleString('ko-KR')}
최고점 100%{probabilityLabel(achievementProbabilities?.maximum)}
최고점의 99% 이상{probabilityLabel(achievementProbabilities?.atLeast99Percent)}{scoreThreshold(result.theoreticalMaxScore, 0.99)}점 이상
최고점의 95% 이상{probabilityLabel(achievementProbabilities?.atLeast95Percent)}{scoreThreshold(result.theoreticalMaxScore, 0.95)}점 이상

모든 노트를 PERFECT로 처리한다고 가정하고 액티브 발동 확률만 반영합니다. 100%는 정확 계산, 99%·95% 이상은 25,000회 반복 계산값이며 최고점에 영향을 주지 않는 발동 실패는 100% 달성 확률을 낮추지 않습니다.

연결 카드 최적화

활성 노드는 유지하며, 파란색 영역은 액티브 발동률 UP 합계를 먼저 최대화한 뒤 예상 점수를 비교합니다. 발동률 UP 합계와 예상 점수가 같으면 기존 연결 카드 배치를 우선 유지합니다.

{#if connectionOptimizationSnapshot}{/if}
{#if connectionOptimizationProgress}
{connectionOptimizationProgress.stage}{#if connectionOptimizationProgress.total > 0}{connectionOptimizationProgress.completed.toLocaleString('ko-KR')} / {connectionOptimizationProgress.total.toLocaleString('ko-KR')}{/if}
{#if connectionOptimizationProgress.total > 0}{/if}
{/if} {#if connectionOptimizationError}{/if} {#if connectionOptimizationProposal}
예상 점수 {connectionOptimizationProposal.beforeExpected.toLocaleString('ko-KR')} → {connectionOptimizationProposal.afterExpected.toLocaleString('ko-KR')}{connectionOptimizationProposal.afterExpected >= connectionOptimizationProposal.beforeExpected ? '+' : ''}{(connectionOptimizationProposal.afterExpected - connectionOptimizationProposal.beforeExpected).toLocaleString('ko-KR')} 이론상 고점 {connectionOptimizationProposal.beforeMaximum.toLocaleString('ko-KR')} → {connectionOptimizationProposal.afterMaximum.toLocaleString('ko-KR')}{connectionOptimizationProposal.afterMaximum >= connectionOptimizationProposal.beforeMaximum ? '+' : ''}{(connectionOptimizationProposal.afterMaximum - connectionOptimizationProposal.beforeMaximum).toLocaleString('ko-KR')} 액티브 발동률 UP 합계 {connectionOptimizationProposal.beforeActivationRateUp.toLocaleString('ko-KR', { maximumFractionDigits: 2 })}% → {connectionOptimizationProposal.afterActivationRateUp.toLocaleString('ko-KR', { maximumFractionDigits: 2 })}%{connectionOptimizationProposal.afterActivationRateUp >= connectionOptimizationProposal.beforeActivationRateUp ? '+' : ''}{(connectionOptimizationProposal.afterActivationRateUp - connectionOptimizationProposal.beforeActivationRateUp).toLocaleString('ko-KR', { maximumFractionDigits: 2 })}%p
{#if connectionOptimizationProposal.assignments.length > 0}
{#each connectionOptimizationProposal.assignments as assignment (`${assignment.memberId}:${assignment.socketId}`)} {@const member = boardMembers.find((item) => item.id === assignment.memberId)} {@const previousCard = assignment.previousCardId ? allCardById.get(assignment.previousCardId) : null} {@const card = assignment.cardId ? allCardById.get(assignment.cardId) : null} {member?.name ?? assignment.memberId} · {connectionSocketName(assignment.memberId, assignment.socketId)}{previousCard ? `${previousCard.rarity}★ ${cardLabel(previousCard)}` : '비어 있음'} → {card ? `${card.rarity}★ ${cardLabel(card)}` : '배치 해제'} {/each}
{:else}

현재 연결 카드 배치가 이미 최적입니다.

{/if}
{/if}

스킬 발동과 노트 분포

멤버별 액티브와 실제 적용 구간, 스페셜 순서를 같은 시간축에서 비교합니다.

{#each result.order as cardId}{resultCardName(cardId)}{/each}
{#each result.order as cardId, slot}
{slot + 1}{resultCardName(cardId)}
{#each result.activeWindows.filter((window) => window.cardId === cardId) as window} {/each}
{/each}
최종 액티브
{#each displayedEffectiveActiveWindows as window} 1 ? ` · 최대 ${window.maxOverlapCount}명 중 가장 높은 효과` : ''}`} role="img" aria-label={`${resultCardName(window.cardId)} 액티브가 ${formatSeconds(window.startSeconds)}부터 ${formatSeconds(window.endSeconds)}까지 적용`} > {/each}
스페셜
{#each result.specialWindows as window} {/each}
{:else}
조건을 선택하고 분석을 시작하면 최적 배치와 각 멤버의 쿨타임 감소량이 여기에 표시됩니다.
{/if}