type Props = { problem: string; playerInfoA: PlayerInfo; playerInfoB: PlayerInfo; leftTimeSeconds: number; }; export type PlayerInfo = { displayName: string | null; iconPath: string | null; score: number | null; code: string | null; submissionResult?: SubmissionResult; }; type SubmissionResult = { status: string; nextScore: number; executionResults: ExecutionResult[]; }; type ExecutionResult = { status: string; label: string; output: string; }; export default function GolfWatchAppGaming({ problem, playerInfoA, playerInfoB, leftTimeSeconds, }: Props) { const leftTime = (() => { const m = Math.floor(leftTimeSeconds / 60); const s = leftTimeSeconds % 60; return `${m.toString().padStart(2, "0")}:${s.toString().padStart(2, "0")}`; })(); const scoreRatio = (() => { const scoreA = playerInfoA.score ?? 0; const scoreB = playerInfoB.score ?? 0; const totalScore = scoreA + scoreB; return totalScore === 0 ? 50 : (scoreA / totalScore) * 100; })(); return (
{playerInfoA.displayName}
{leftTime}
{playerInfoB.displayName}
{playerInfoA.score ?? "-"}
{playerInfoB.score ?? "-"}
						{playerInfoA.code}
					
{playerInfoA.submissionResult?.status}( {playerInfoA.submissionResult?.nextScore})
    {playerInfoA.submissionResult?.executionResults.map( (result, idx) => (
  1. {result.status} {result.label}
    {result.output}
  2. ), )}
						{playerInfoB.code}
					
{playerInfoB.submissionResult?.status}( {playerInfoB.submissionResult?.nextScore})
    {playerInfoB.submissionResult?.executionResults.map( (result, idx) => (
  1. {result.status} {result.label}
    {result.output}
  2. ), )}
{problem}
); }