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: | "running" | "success" | "wrong_answer" | "timeout" | "compile_error" | "runtime_error" | "internal_error"; preliminaryScore: number; verificationResults: VerificationResult[]; }; type VerificationResult = { testcase_id: number | null; status: | "running" | "success" | "wrong_answer" | "timeout" | "compile_error" | "runtime_error" | "internal_error" | "canceled"; label: string; stdout: string; stderr: string; }; function submissionResultStatusToLabel( status: SubmissionResult["status"] | null, ) { switch (status) { case null: return "-"; case "running": return "Running..."; case "success": return "Accepted"; case "wrong_answer": return "Wrong Answer"; case "timeout": return "Time Limit Exceeded"; case "compile_error": return "Compile Error"; case "runtime_error": return "Runtime Error"; case "internal_error": return "Internal Error"; } } 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 : (scoreB / totalScore) * 100; })(); return (
{playerInfoA.displayName}
{leftTime}
{playerInfoB.displayName}
{playerInfoA.score ?? "-"}
{playerInfoB.score ?? "-"}
						{playerInfoA.code}
					
{submissionResultStatusToLabel( playerInfoA.submissionResult?.status ?? null, )}{" "} ({playerInfoA.submissionResult?.preliminaryScore})
    {playerInfoA.submissionResult?.verificationResults.map( (result, idx) => (
  1. {result.status} {result.label}
    {result.stdout} {result.stderr}
  2. ), )}
						{playerInfoB.code}
					
{submissionResultStatusToLabel( playerInfoB.submissionResult?.status ?? null, )}{" "} ({playerInfoB.submissionResult?.preliminaryScore ?? "-"})
    {playerInfoB.submissionResult?.verificationResults.map( (result, idx) => (
  1. {result.status} {result.label}
    {result.stdout} {result.stderr}
  2. ), )}
{problem}
); }