From f0b8f1dd25075e76a6b964163d258fd4960a7f12 Mon Sep 17 00:00:00 2001 From: "k.hiro1818" Date: Wed, 20 May 2026 08:32:26 +0000 Subject: [PATCH 1/4] feat: add AOJ_ICPC contest type for ICPC Prelim/Regional import Add support for importing ICPC (International Collegiate Programming Contest) problems from Aizu Online Judge via the existing AojChallengesApiClient, covering both ICPC National Domestic Prelim and Asia Regional rounds. Co-Authored-By: Claude Sonnet 4.6 --- .../2026-05-20/aoj-icpc-import/plan.md | 333 + .../migration.sql | 2 + prisma/schema.prisma | 1 + .../clients/aizu_online_judge/clients.test.ts | 54 + src/lib/clients/aizu_online_judge/types.ts | 6 +- .../challenges/icpc_prelim/contests.json | 3973 ++++++++++++ .../challenges/icpc_regional/contests.json | 5374 +++++++++++++++++ src/lib/clients/fixtures/record_requests.ts | 4 +- src/lib/clients/index.ts | 12 +- src/lib/types/contest.ts | 1 + src/lib/utils/contest.ts | 25 +- src/lib/utils/task.ts | 3 +- src/test/lib/utils/contest.test.ts | 38 + src/test/lib/utils/task.test.ts | 8 + .../test_cases/contest_name_and_task_index.ts | 46 + .../utils/test_cases/contest_name_labels.ts | 19 + src/test/lib/utils/test_cases/contest_type.ts | 14 + src/test/lib/utils/test_cases/task_url.ts | 19 + 18 files changed, 9924 insertions(+), 8 deletions(-) create mode 100644 docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md create mode 100644 prisma/migrations/20260520080410_add_aoj_icpc_to_contest_type/migration.sql create mode 100644 src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_prelim/contests.json create mode 100644 src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_regional/contests.json diff --git a/docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md b/docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md new file mode 100644 index 000000000..171c87354 --- /dev/null +++ b/docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md @@ -0,0 +1,333 @@ +# AOJ ICPC インポート対応 + +## 概要 + +AOJ(Aizu Online Judge)の ICPC 国内予選・地区予選の問題をインポートできるようにする。 + +対象 URL: + +- https://onlinejudge.u-aizu.ac.jp/challenges/sources/ICPC/Prelim +- https://onlinejudge.u-aizu.ac.jp/challenges/sources/ICPC/Regional + +API エンドポイント: `/challenges/cl/ICPC/PRELIM` / `/challenges/cl/ICPC/REGIONAL` + +contest_id (abbr) フォーマット: `ICPCPrelim{YYYY}` / `ICPCRegional{YYYY}`(確認済み) + +## 設計方針 + +既存の `AojChallengesApiClient` を拡張する。PCK・JAG と全く同じアーキテクチャで動作するため、 +`ChallengeContestType` に `'ICPC'` を追加し、`IcpcRound = 'PRELIM' | 'REGIONAL'` を定義するだけで +クライアント実装は不要。 + +## 却下した代替案 + +- **専用 ApiClient クラス**: PCK/JAG と同じ API 構造なので不要。YAGNI。 +- **AOJ_JAG との統合**: JAG (Japan Alumni Group) と ICPC は主催が異なるため分離が正しい。 + +## スコープ(本 PR) + +ContestTableProvider は次 PR。本 PR は以下のみ: + +1. Prisma enum 追加 + migration +2. API client 型拡張 +3. `classifyContest()` 更新 +4. 管理画面 import source 追加 + +## フェーズ概要 + +| フェーズ | 内容 | リスク | +| -------- | ------------------------------------------------------------------------- | --------------- | +| Phase 1 | テストを書く(TDD: フィクスチャ・テストケース追加) | 低 | +| Phase 2 | Prisma schema 変更 + migration + `types/contest.ts` 更新 | 中(migration) | +| Phase 3 | API Client 型拡張(`types.ts` / `index.ts`) | 低 | +| Phase 4 | `contest.ts` 更新(classifyContest / priorities / labels / isAojContest) | 低 | + +--- + +## Phase 1: テストを書く(TDD) + +### タスク 1-1: テスト用フィクスチャ作成(`record_requests.ts` 経由) + +フィクスチャ JSON は手書きせず、実 API を叩いて自動生成する。 + +**`src/lib/clients/fixtures/record_requests.ts` を変更**: + +1. `saveAojChallenge` の引数型を拡張: + + ```typescript + async function saveAojChallenge( + contestType: 'PCK' | 'JAG' | 'ICPC', + round: 'PRELIM' | 'FINAL' | 'REGIONAL', + dir: string, + ): Promise; + ``` + +2. `challengeConfigs` に ICPC を追加: + + ```typescript + const challengeConfigs = [ + { contestType: 'PCK', round: 'PRELIM', dir: 'pck_prelim' }, + { contestType: 'PCK', round: 'FINAL', dir: 'pck_final' }, + { contestType: 'JAG', round: 'PRELIM', dir: 'jag_prelim' }, + { contestType: 'JAG', round: 'REGIONAL', dir: 'jag_regional' }, + { contestType: 'ICPC', round: 'PRELIM', dir: 'icpc_prelim' }, + { contestType: 'ICPC', round: 'REGIONAL', dir: 'icpc_regional' }, + ] as const; + ``` + +**スクリプト実行**: + +```bash +pnpm dlx vite-node ./src/lib/clients/fixtures/record_requests.ts +``` + +→ `src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_prelim/contests.json` と +`icpc_regional/contests.json` が自動生成される。 + +### タスク 1-2: `clients.test.ts` に ICPC テスト追加 + +`FIXTURE_PATHS` に追加: + +```typescript +icpcPrelim: { + contests: './src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_prelim/contests.json', +}, +icpcRegional: { + contests: './src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_regional/contests.json', +}, +``` + +nock 対象: + +- `/challenges/cl/ICPC/PRELIM` +- `/challenges/cl/ICPC/REGIONAL` + +PCK/JAG と同パターンで `describe('ICPC PRELIM')` / `describe('ICPC REGIONAL')` を追加。 + +### タスク 1-3: `contest_type.ts` に `aojIcpc` 追加 + +```typescript +const aojIcpcContestData = [ + { name: 'AOJ, ICPC Prelim 2023', contestId: 'ICPCPrelim2023' }, + { name: 'AOJ, ICPC Prelim 2024', contestId: 'ICPCPrelim2024' }, + { name: 'AOJ, ICPC Regional 2023', contestId: 'ICPCRegional2023' }, + { name: 'AOJ, ICPC Regional 2024', contestId: 'ICPCRegional2024' }, +]; + +export const aojIcpc = aojIcpcContestData.map(({ name, contestId }) => + createTestCaseForContestType(name)({ + contestId, + expected: ContestType.AOJ_ICPC, + }), +); +``` + +### タスク 1-4: `contest_name_and_task_index.ts` に ICPC テストデータ追加 + +フィクスチャ生成後に実際の問題 ID を確認して設定する。 + +```typescript +const AOJ_ICPC_TEST_DATA = { + Prelim2023: { contestId: 'Prelim2023', tasks: ['実ID1', '実ID2'] }, + Prelim2024: { contestId: 'Prelim2024', tasks: ['実ID1', '実ID2'] }, + Regional2023: { contestId: 'Regional2023', tasks: ['実ID1', '実ID2'] }, + Regional2024: { contestId: 'Regional2024', tasks: ['実ID1', '実ID2'] }, +}; +``` + +期待値例: + +- `ICPCPrelim2024` + task `XXXX` → `"AOJ XXXX(ICPC 国内予選 2024)"` +- `ICPCRegional2024` + task `XXXX` → `"AOJ XXXX(ICPC 地区予選 2024)"` + +### タスク 1-5: `contest.test.ts` に ICPC テストブロック追加 + +JAG の直後に以下 4 箇所追加: + +1. `classifyContest` → `when contest_id means AOJ ICPC (prelim and regional)` +2. `get contest priority` → `when contest_id means AOJ ICPC (prelim and regional)` +3. `get contest name label` → ICPC 個別テスト +4. `addContestNameToTaskIndex` → AOJ セクションに ICPC 追加 + +--- + +## Phase 2: Prisma Schema + Types + +### タスク 2-1: `prisma/schema.prisma` 変更 + +`AOJ_ICPC` を `AOJ_PCK` の直後、`AOJ_JAG` の直前に追加: + +```prisma +AOJ_PCK // All-Japan High School Programming Contest (PCK) +AOJ_ICPC // ICPC (International Collegiate Programming Contest) +AOJ_JAG // ACM-ICPC Japan Alumni Group Contest (JAG) +``` + +### タスク 2-2: Migration 実行 + +```bash +pnpm exec prisma migrate dev --name add_aoj_icpc_to_contest_type +``` + +### タスク 2-3: `src/lib/types/contest.ts` 更新 + +`ContestType` const に追加(`AOJ_PCK` と `AOJ_JAG` の間): + +```typescript +AOJ_PCK: 'AOJ_PCK', +AOJ_ICPC: 'AOJ_ICPC', // ICPC (International Collegiate Programming Contest) +AOJ_JAG: 'AOJ_JAG', +``` + +--- + +## Phase 3: API Client 拡張 + +### タスク 3-1: `src/lib/clients/aizu_online_judge/types.ts` + +```typescript +export type ChallengeContestType = 'PCK' | 'JAG' | 'ICPC'; + +export type IcpcRound = 'PRELIM' | 'REGIONAL'; + +export type ChallengeRoundMap = { + PCK: PckRound; + JAG: JagRound; + ICPC: IcpcRound; +}; +``` + +### タスク 3-2: `src/lib/clients/index.ts` + +`ContestTaskImportSource` に追加: + +```typescript +| 'aoj_icpc_prelim' +| 'aoj_icpc_regional' +``` + +`importSources` に追加: + +```typescript +aoj_icpc_prelim: buildAojChallengeConfig( + { contestType: 'ICPC', round: 'PRELIM' }, + 'AOJ - ICPC 国内予選', +), +aoj_icpc_regional: buildAojChallengeConfig( + { contestType: 'ICPC', round: 'REGIONAL' }, + 'AOJ - ICPC 地区予選', +), +``` + +--- + +## Phase 4: `contest.ts` 更新 + +### タスク 4-1: `classifyContest()` に ICPC 追加 + +JAG の `if` の直前に追加: + +```typescript +if (/^ICPC(Prelim|Regional)\d*$/.exec(contest_id)) { + return ContestType.AOJ_ICPC; +} +``` + +### タスク 4-2: `contestTypePriorities` 更新 + +```typescript +[ContestType.AOJ_COURSES, 21], +[ContestType.AOJ_PCK, 22], +[ContestType.AOJ_ICPC, 23], // 追加 +[ContestType.AOJ_JAG, 24], // 23 → 24 +``` + +JSDoc カテゴリ名(`External platforms`)は変更しない。括弧内の数値範囲のみ `(21–24)` に更新。 + +### タスク 4-3: `ICPC_TRANSLATIONS` 追加(`JAG_TRANSLATIONS` 直後) + +```typescript +const ICPC_TRANSLATIONS = { + Prelim: ' 国内予選 ', + Regional: ' 地区予選 ', +}; +``` + +結果例(`getAojContestLabel` による文字列置換): + +- `ICPCPrelim2024` → `(ICPC 国内予選 2024)` +- `ICPCRegional2024` → `(ICPC 地区予選 2024)` + +### タスク 4-4: `getContestNameLabel()` に ICPC 分岐追加(JAG 直後) + +```typescript +if (contestId.startsWith('ICPC')) { + return getAojContestLabel(ICPC_TRANSLATIONS, contestId); +} +``` + +### タスク 4-5: `isAojContest()` に ICPC 追加 + +```typescript +function isAojContest(contestId: string): boolean { + return ( + aojCoursePrefixes.has(contestId) || + contestId.startsWith('PCK') || + contestId.startsWith('JAG') || + contestId.startsWith('ICPC') + ); +} +``` + +--- + +## 検証 + +```bash +pnpm exec prisma generate # Prisma client 再生成 +pnpm test:unit src/lib/clients/ # API client テスト +pnpm test:unit src/test/lib/utils/contest.test.ts # contest.ts テスト +pnpm check # 型チェック +pnpm lint # lint +``` + +管理画面 (`/tasks`) に「AOJ - ICPC 国内予選」「AOJ - ICPC 地区予選」が表示されることを目視確認。 + +--- + +## 追加変更: `AojGenerator.canHandle()` に ICPC 追加 + +### 概要 + +`src/lib/utils/task.ts` の `AojGenerator.canHandle()` に `contestId.startsWith('ICPC')` を追加した。 +これにより、ICPC コンテストの問題 URL が AtCoder URL ではなく AOJ URL(`AOJ_TASKS_URL/{taskId}`)で生成される。 + +### 変更ファイル + +- `src/lib/utils/task.ts` — `AojGenerator.canHandle()` に ICPC 条件追加 +- `src/test/lib/utils/test_cases/task_url.ts` — `icpcContests` / `aojIcpc` エクスポート追加 +- `src/test/lib/utils/task.test.ts` — AOJ ICPC describe ブロック追加 + +### テストデータ(実 task ID) + +```typescript +const icpcContests = [ + { contestId: 'ICPCPrelim2023', tasks: ['1664', '1665'] }, + { contestId: 'ICPCPrelim2024', tasks: ['1672', '1673'] }, + { contestId: 'ICPCRegional2023', tasks: ['1444', '1445'] }, + { contestId: 'ICPCRegional2024', tasks: ['1455', '1456'] }, +]; +``` + +### 検証 + +```bash +pnpm test:unit src/test/lib/utils/task.test.ts # 172 tests passed +``` + +--- + +## 残タスク(次 PR) + +- `ContestTableProvider` 実装(how-to-add-contest-table-provider.md 参照) +- `contestTypePriorities` の優先度は暫定値(次 PR で ContestTableProvider 登録後に再確認) diff --git a/prisma/migrations/20260520080410_add_aoj_icpc_to_contest_type/migration.sql b/prisma/migrations/20260520080410_add_aoj_icpc_to_contest_type/migration.sql new file mode 100644 index 000000000..cedac7d71 --- /dev/null +++ b/prisma/migrations/20260520080410_add_aoj_icpc_to_contest_type/migration.sql @@ -0,0 +1,2 @@ +-- AlterEnum +ALTER TYPE "ContestType" ADD VALUE 'AOJ_ICPC'; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0f2269f82..e6b28ba97 100755 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -321,6 +321,7 @@ enum ContestType { OTHERS // AtCoder (その他) AOJ_COURSES // AIZU ONLINE JUDGE Courses AOJ_PCK // All-Japan High School Programming Contest (PCK) + AOJ_ICPC // ICPC (International Collegiate Programming Contest) AOJ_JAG // ACM-ICPC Japan Alumni Group Contest (JAG) } diff --git a/src/lib/clients/aizu_online_judge/clients.test.ts b/src/lib/clients/aizu_online_judge/clients.test.ts index da6df09d1..51f75367f 100644 --- a/src/lib/clients/aizu_online_judge/clients.test.ts +++ b/src/lib/clients/aizu_online_judge/clients.test.ts @@ -53,6 +53,12 @@ const FIXTURE_PATHS = { jagRegional: { contests: './src/lib/clients/fixtures/aizu_online_judge/challenges/jag_regional/contests.json', }, + icpcPrelim: { + contests: './src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_prelim/contests.json', + }, + icpcRegional: { + contests: './src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_regional/contests.json', + }, }; describe('AojCoursesApiClient', () => { @@ -251,4 +257,52 @@ describe('AojChallengesApiClient', () => { expect(tasks.length).toBe(expectedCount); }); }); + + describe('ICPC PRELIM', () => { + const contestsMock = loadMockData(FIXTURE_PATHS.icpcPrelim.contests); + let client: AojChallengesApiClient; + + beforeEach(() => { + nock(AOJ_API_BASE).get('/challenges/cl/ICPC/PRELIM').reply(200, contestsMock); + client = buildChallengesClient(); + }); + + test('fetches and transforms ICPC PRELIM contests', async () => { + const contests = await client.getContests({ contestType: 'ICPC', round: 'PRELIM' }); + const expectedCount = contestsMock.contests.flatMap((contest) => contest.days).length; + expect(contests.length).toBe(expectedCount); + }); + + test('fetches and transforms ICPC PRELIM tasks', async () => { + const tasks = await client.getTasks({ contestType: 'ICPC', round: 'PRELIM' }); + const expectedCount = contestsMock.contests + .flatMap((contest) => contest.days) + .flatMap((day) => day.problems).length; + expect(tasks.length).toBe(expectedCount); + }); + }); + + describe('ICPC REGIONAL', () => { + const contestsMock = loadMockData(FIXTURE_PATHS.icpcRegional.contests); + let client: AojChallengesApiClient; + + beforeEach(() => { + nock(AOJ_API_BASE).get('/challenges/cl/ICPC/REGIONAL').reply(200, contestsMock); + client = buildChallengesClient(); + }); + + test('fetches and transforms ICPC REGIONAL contests', async () => { + const contests = await client.getContests({ contestType: 'ICPC', round: 'REGIONAL' }); + const expectedCount = contestsMock.contests.flatMap((contest) => contest.days).length; + expect(contests.length).toBe(expectedCount); + }); + + test('fetches and transforms ICPC REGIONAL tasks', async () => { + const tasks = await client.getTasks({ contestType: 'ICPC', round: 'REGIONAL' }); + const expectedCount = contestsMock.contests + .flatMap((contest) => contest.days) + .flatMap((day) => day.problems).length; + expect(tasks.length).toBe(expectedCount); + }); + }); }); diff --git a/src/lib/clients/aizu_online_judge/types.ts b/src/lib/clients/aizu_online_judge/types.ts index 5b82f6dbf..d6ad433d1 100644 --- a/src/lib/clients/aizu_online_judge/types.ts +++ b/src/lib/clients/aizu_online_judge/types.ts @@ -28,7 +28,7 @@ export type ChallengeParams = { }; /** Represents the types of challenge contests available. */ -export type ChallengeContestType = 'PCK' | 'JAG'; +export type ChallengeContestType = 'PCK' | 'JAG' | 'ICPC'; /** * A map that associates each type of challenge contest with its corresponding round type. @@ -36,6 +36,7 @@ export type ChallengeContestType = 'PCK' | 'JAG'; export type ChallengeRoundMap = { PCK: PckRound; JAG: JagRound; + ICPC: IcpcRound; }; /** Represents PCK contest rounds */ @@ -44,6 +45,9 @@ export type PckRound = 'PRELIM' | 'FINAL'; /** Represents JAG contest rounds */ export type JagRound = 'PRELIM' | 'REGIONAL'; +/** Represents ICPC contest rounds */ +export type IcpcRound = 'PRELIM' | 'REGIONAL'; + export type AOJChallengeContestAPI = { readonly largeCl: Record; readonly contests: ChallengeContests; diff --git a/src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_prelim/contests.json b/src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_prelim/contests.json new file mode 100644 index 000000000..59b40c208 --- /dev/null +++ b/src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_prelim/contests.json @@ -0,0 +1,3973 @@ +{ + "largeCl": { + "id": "ICPC", + "title": "International Collegiate Programming Contest", + "filter": [ + { + "label": "Prelim", + "value": "prelim" + }, + { + "label": "Regional", + "value": "regional" + } + ], + "middleCls": null + }, + "contests": [ + { + "abbr": "ICPCPrelim1998", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 1998, + "progress": 0, + "numberOfProblems": 4, + "numberOfSolved": 0, + "days": [ + { + "id": 35, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 1998", + "progress": 0, + "numberOfProblems": 4, + "numberOfSolved": 0, + "problems": [ + { + "id": "1100", + "available": 1, + "doctype": 2, + "name": "Area of Polygons", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 630, + "submissions": 1429, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.92442267319804, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1101", + "available": 1, + "doctype": 2, + "name": "A Simple Offline Text Editor", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 157, + "submissions": 1106, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 17.72151898734177, + "score": 0.8152866242038217, + "userScore": 0 + }, + { + "id": "1102", + "available": 1, + "doctype": 2, + "name": "Calculation of Expressions", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 166, + "submissions": 918, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 22.766884531590414, + "score": 0.7710843373493976, + "userScore": 0 + }, + { + "id": "1103", + "available": 1, + "doctype": 2, + "name": "Board Arrangements for Concentration Games", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 172, + "submissions": 235, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 80.85106382978724, + "score": 0.7441860465116279, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim1999", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 1999, + "progress": 0, + "numberOfProblems": 5, + "numberOfSolved": 0, + "days": [ + { + "id": 36, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 1999", + "progress": 0, + "numberOfProblems": 5, + "numberOfSolved": 0, + "problems": [ + { + "id": "1104", + "available": 1, + "doctype": 2, + "name": "Where's Your Robot?", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 353, + "submissions": 762, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.181102362204726, + "score": 0.3626062322946176, + "userScore": 0 + }, + { + "id": "1105", + "available": 1, + "doctype": 2, + "name": "Unable Count", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 264, + "submissions": 793, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40.85750315258512, + "score": 0.48484848484848486, + "userScore": 0 + }, + { + "id": "1106", + "available": 1, + "doctype": 2, + "name": "Factorization of Quadratic Formula", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 172, + "submissions": 650, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 31.076923076923077, + "score": 0.7441860465116279, + "userScore": 0 + }, + { + "id": "1107", + "available": 1, + "doctype": 2, + "name": "Spiral Footrace", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 137, + "submissions": 503, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 34.39363817097416, + "score": 0.9343065693430657, + "userScore": 0 + }, + { + "id": "1108", + "available": 1, + "doctype": 2, + "name": "A Long Ride on a Railway", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 106, + "submissions": 226, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 52.21238938053097, + "score": 1.2075471698113207, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2000", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2000, + "progress": 0, + "numberOfProblems": 4, + "numberOfSolved": 0, + "days": [ + { + "id": 37, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2000", + "progress": 0, + "numberOfProblems": 4, + "numberOfSolved": 0, + "problems": [ + { + "id": "1109", + "available": 1, + "doctype": 2, + "name": "Fermat's Last Theorem", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 303, + "submissions": 858, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 64.33566433566433, + "score": 0.42244224422442245, + "userScore": 0 + }, + { + "id": "1110", + "available": 1, + "doctype": 2, + "name": "Patience", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 170, + "submissions": 263, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 78.32699619771863, + "score": 0.7529411764705882, + "userScore": 0 + }, + { + "id": "1111", + "available": 1, + "doctype": 2, + "name": "Cyber Guardian", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 145, + "submissions": 488, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 59.01639344262295, + "score": 0.8827586206896552, + "userScore": 0 + }, + { + "id": "1112", + "available": 1, + "doctype": 2, + "name": "Strange Key", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 42, + "submissions": 122, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 39.34426229508197, + "score": 3.0476190476190474, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2001", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2001, + "progress": 0, + "numberOfProblems": 5, + "numberOfSolved": 0, + "days": [ + { + "id": 38, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2001", + "progress": 0, + "numberOfProblems": 5, + "numberOfSolved": 0, + "problems": [ + { + "id": "1114", + "available": 1, + "doctype": 2, + "name": "Get a Rectangular Field", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 251, + "submissions": 387, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 76.22739018087856, + "score": 0.5099601593625498, + "userScore": 0 + }, + { + "id": "1115", + "available": 1, + "doctype": 2, + "name": "Multi-column List", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 117, + "submissions": 320, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 41.875, + "score": 1.0940170940170941, + "userScore": 0 + }, + { + "id": "1116", + "available": 1, + "doctype": 2, + "name": "Jigsaw Puzzles for Computers", + "problemTimeLimit": 3, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 118, + "submissions": 177, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 83.05084745762711, + "score": 1.0847457627118644, + "userScore": 0 + }, + { + "id": "1117", + "available": 1, + "doctype": 2, + "name": "Missing Numbers", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 110, + "submissions": 315, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 36.82539682539682, + "score": 1.1636363636363636, + "userScore": 0 + }, + { + "id": "1118", + "available": 1, + "doctype": 2, + "name": "Nets of Dice", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 55, + "submissions": 139, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.48201438848921, + "score": 2.327272727272727, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2002", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2002, + "progress": 0, + "numberOfProblems": 4, + "numberOfSolved": 0, + "days": [ + { + "id": 39, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2002", + "progress": 0, + "numberOfProblems": 4, + "numberOfSolved": 0, + "problems": [ + { + "id": "1119", + "available": 1, + "doctype": 2, + "name": "Exploring Caves", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 261, + "submissions": 396, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 72.72727272727273, + "score": 0.4904214559386973, + "userScore": 0 + }, + { + "id": "1120", + "available": 1, + "doctype": 2, + "name": "Pile Up!", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 95, + "submissions": 364, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 32.417582417582416, + "score": 1.3473684210526315, + "userScore": 0 + }, + { + "id": "1121", + "available": 1, + "doctype": 2, + "name": "Kanglish:Analysis on Artificial Language", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 122, + "submissions": 208, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 62.01923076923077, + "score": 1.0491803278688525, + "userScore": 0 + }, + { + "id": "1122", + "available": 1, + "doctype": 2, + "name": "What is the Number in my Mind ?", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 65, + "submissions": 307, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 33.22475570032573, + "score": 1.9692307692307693, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2003", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2003, + "progress": 0, + "numberOfProblems": 5, + "numberOfSolved": 0, + "days": [ + { + "id": 40, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2003", + "progress": 0, + "numberOfProblems": 5, + "numberOfSolved": 0, + "problems": [ + { + "id": "1124", + "available": 1, + "doctype": 2, + "name": "When Can We Meet?", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 977, + "submissions": 1641, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 65.75258988421695, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1125", + "available": 1, + "doctype": 2, + "name": "Get Many Persimmon Trees", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 879, + "submissions": 1516, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 65.56728232189974, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1126", + "available": 1, + "doctype": 2, + "name": "The Secret Number", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 615, + "submissions": 1823, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 41.68952276467361, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1127", + "available": 1, + "doctype": 2, + "name": "Building a Space Station", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1163, + "submissions": 2946, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 48.200950441276305, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1128", + "available": 1, + "doctype": 2, + "name": "Square Carpets", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 92, + "submissions": 604, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 22.350993377483444, + "score": 1.391304347826087, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2004", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2004, + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "days": [ + { + "id": 41, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2004", + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "problems": [ + { + "id": "1129", + "available": 1, + "doctype": 4, + "name": "Hanafuda Shuffle", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 2744, + "submissions": 5440, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 60.68014705882353, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1130", + "available": 1, + "doctype": 4, + "name": "Red and Black", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 2532, + "submissions": 5384, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 64.9888558692422, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1131", + "available": 1, + "doctype": 4, + "name": "Unit Fraction Partition", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 624, + "submissions": 2099, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 41.3530252501191, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1132", + "available": 1, + "doctype": 4, + "name": "Circle and Points", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 800, + "submissions": 2956, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 38.734776725304464, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1133", + "available": 2, + "doctype": 4, + "name": "Water Tank", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 154, + "submissions": 369, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 50.13550135501355, + "score": 0.8311688311688312, + "userScore": 0 + }, + { + "id": "1134", + "available": 1, + "doctype": 4, + "name": "Name the Crossing", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 122, + "submissions": 451, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 33.70288248337029, + "score": 1.0491803278688525, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2005", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2005, + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "days": [ + { + "id": 42, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2005", + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "problems": [ + { + "id": "1135", + "available": 1, + "doctype": 4, + "name": "Ohgas' Fortune", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 738, + "submissions": 1168, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 71.31849315068493, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1136", + "available": 1, + "doctype": 4, + "name": "Polygonal Line Search", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 910, + "submissions": 1890, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 55.87301587301587, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1137", + "available": 1, + "doctype": 4, + "name": "Numeral System", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1368, + "submissions": 2057, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 77.00534759358288, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1138", + "available": 1, + "doctype": 4, + "name": "Traveling by Stagecoach", + "problemTimeLimit": 5, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 656, + "submissions": 1842, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.954397394136805, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1139", + "available": 1, + "doctype": 4, + "name": "Earth Observation with a Mobile Robot Team", + "problemTimeLimit": 5, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 57, + "submissions": 319, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 26.33228840125392, + "score": 2.245614035087719, + "userScore": 0 + }, + { + "id": "1140", + "available": 1, + "doctype": 4, + "name": "Cleaning Robot", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 593, + "submissions": 1283, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 57.20966484801247, + "score": 0.25, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2006", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2006, + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "days": [ + { + "id": 43, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2006", + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "problems": [ + { + "id": "1141", + "available": 1, + "doctype": 4, + "name": "Dirichlet's Theorem on Arithmetic Progressions", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1546, + "submissions": 2958, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 63.657876943881, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1142", + "available": 1, + "doctype": 4, + "name": "Organize Your Train part II", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1619, + "submissions": 2505, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 85.6686626746507, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1143", + "available": 1, + "doctype": 4, + "name": "Hexerpents of Hexwamp", + "problemTimeLimit": 15, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 94, + "submissions": 383, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 46.73629242819843, + "score": 1.3617021276595744, + "userScore": 0 + }, + { + "id": "1144", + "available": 1, + "doctype": 4, + "name": "Curling 2.0", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 988, + "submissions": 3210, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.398753894081, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1145", + "available": 1, + "doctype": 4, + "name": "The Genome Database of All Space Life", + "problemTimeLimit": 5, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 382, + "submissions": 1461, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.43668720054757, + "score": 0.33507853403141363, + "userScore": 0 + }, + { + "id": "1146", + "available": 2, + "doctype": 4, + "name": "Secrets in Shadows", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 43, + "submissions": 379, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 22.16358839050132, + "score": 2.9767441860465116, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2007", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2007, + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "days": [ + { + "id": 44, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2007", + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "problems": [ + { + "id": "1147", + "available": 1, + "doctype": 4, + "name": "ICPC Score Totalizer Software", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 4358, + "submissions": 9386, + "recommendations": 4, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 57.88408267632644, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1148", + "available": 1, + "doctype": 4, + "name": "Analyzing Login/Logout Records", + "problemTimeLimit": 3, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1014, + "submissions": 2645, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 48.80907372400756, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1149", + "available": 1, + "doctype": 4, + "name": "Cut the Cake", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1244, + "submissions": 3407, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 44.878191957734074, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1150", + "available": 1, + "doctype": 4, + "name": "Cliff Climbing", + "problemTimeLimit": 3, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 581, + "submissions": 1256, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 60.90764331210191, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1151", + "available": 2, + "doctype": 4, + "name": "Twirl Around", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 34, + "submissions": 166, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 38.55421686746988, + "score": 3.764705882352941, + "userScore": 0 + }, + { + "id": "1152", + "available": 1, + "doctype": 4, + "name": "Dr. Podboq or: How We Became Asymmetric", + "problemTimeLimit": 5, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 90, + "submissions": 329, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 38.90577507598784, + "score": 1.4222222222222223, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2008", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2008, + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "days": [ + { + "id": 45, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2008", + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "problems": [ + { + "id": "1153", + "available": 1, + "doctype": 4, + "name": "Equal Total Scores", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 2006, + "submissions": 3843, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 62.63335935467083, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1154", + "available": 1, + "doctype": 4, + "name": "Monday-Saturday Prime Factors", + "problemTimeLimit": 3, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1175, + "submissions": 2486, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 62.99275945293645, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1155", + "available": 1, + "doctype": 4, + "name": "How can I satisfy thee? Let me count the ways...", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 876, + "submissions": 1708, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 67.62295081967213, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1156", + "available": 1, + "doctype": 4, + "name": "Twirling Robot", + "problemTimeLimit": 5, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 699, + "submissions": 1223, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 77.92313982011447, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1157", + "available": 2, + "doctype": 4, + "name": "Roll-A-Big-Ball", + "problemTimeLimit": 5, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 396, + "submissions": 1165, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 48.58369098712446, + "score": 0.32323232323232326, + "userScore": 0 + }, + { + "id": "1158", + "available": 1, + "doctype": 4, + "name": "ICPC: Intelligent Congruent Partition of Chocolate", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 69, + "submissions": 359, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 50.41782729805014, + "score": 1.855072463768116, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2009", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2009, + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "days": [ + { + "id": 46, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2009", + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "problems": [ + { + "id": "1159", + "available": 1, + "doctype": 4, + "name": "Next Mayor", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 2072, + "submissions": 3544, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 74.71783295711062, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1160", + "available": 1, + "doctype": 4, + "name": "How Many Islands?", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 4981, + "submissions": 12653, + "recommendations": 3, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 52.92815932980321, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1161", + "available": 1, + "doctype": 4, + "name": "Verbal Arithmetic", + "problemTimeLimit": 10, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 461, + "submissions": 3387, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 50.42810746973723, + "score": 0.27765726681127983, + "userScore": 0 + }, + { + "id": "1162", + "available": 2, + "doctype": 4, + "name": "Discrete Speed", + "problemTimeLimit": 1, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 516, + "submissions": 2204, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 31.941923774954628, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1163", + "available": 1, + "doctype": 4, + "name": "Cards", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 948, + "submissions": 2349, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 59.59982971477224, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1164", + "available": 2, + "doctype": 4, + "name": "Tighten Up!", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 43, + "submissions": 164, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 43.90243902439025, + "score": 2.9767441860465116, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2010", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2010, + "progress": 0, + "numberOfProblems": 7, + "numberOfSolved": 0, + "days": [ + { + "id": 47, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2010", + "progress": 0, + "numberOfProblems": 7, + "numberOfSolved": 0, + "problems": [ + { + "id": "1165", + "available": 1, + "doctype": 4, + "name": "Pablo Squarson's Headache", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1559, + "submissions": 2427, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 75.15451174289245, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1166", + "available": 1, + "doctype": 4, + "name": "Amazing Mazes", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 2571, + "submissions": 5439, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.815958815958815, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1167", + "available": 1, + "doctype": 4, + "name": "Pollock's conjecture", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 2264, + "submissions": 8042, + "recommendations": 4, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 38.83362347674708, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1168", + "available": 1, + "doctype": 4, + "name": "Off Balance", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 370, + "submissions": 770, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 59.35064935064935, + "score": 0.34594594594594597, + "userScore": 0 + }, + { + "id": "1169", + "available": 1, + "doctype": 4, + "name": "The Most Powerful Spell", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 292, + "submissions": 1996, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 24.09819639278557, + "score": 0.4383561643835616, + "userScore": 0 + }, + { + "id": "1170", + "available": 1, + "doctype": 4, + "name": "Old Memories", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 30, + "submissions": 216, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 23.61111111111111, + "score": 4.266666666666667, + "userScore": 0 + }, + { + "id": "1171", + "available": 2, + "doctype": 4, + "name": "Laser Beam Reflections", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 123, + "submissions": 287, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 53.31010452961672, + "score": 1.0406504065040652, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2011", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2011, + "progress": 0, + "numberOfProblems": 7, + "numberOfSolved": 0, + "days": [ + { + "id": 48, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2011", + "progress": 0, + "numberOfProblems": 7, + "numberOfSolved": 0, + "problems": [ + { + "id": "1172", + "available": 1, + "doctype": 4, + "name": "Chebyshev's Theorem", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1848, + "submissions": 3819, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 62.4509033778476, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1173", + "available": 1, + "doctype": 4, + "name": "The Balance of the World", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1792, + "submissions": 5883, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 39.7416284208737, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1174", + "available": 1, + "doctype": 4, + "name": "Identically Colored Panels Connection", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 768, + "submissions": 1352, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 80.54733727810651, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1175", + "available": 1, + "doctype": 4, + "name": "And Then. How Many Are There?", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 522, + "submissions": 2606, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 32.61703760552571, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1176", + "available": 1, + "doctype": 4, + "name": "Planning Rolling Blackouts", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 478, + "submissions": 819, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 74.84737484737485, + "score": 0.26778242677824265, + "userScore": 0 + }, + { + "id": "1177", + "available": 2, + "doctype": 4, + "name": "Watchdog Corporation", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 54, + "submissions": 189, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40.21164021164021, + "score": 2.3703703703703702, + "userScore": 0 + }, + { + "id": "1178", + "available": 1, + "doctype": 4, + "name": "A Broken Door", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 148, + "submissions": 312, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 65.06410256410257, + "score": 0.8648648648648649, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2012", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2012, + "progress": 0, + "numberOfProblems": 7, + "numberOfSolved": 0, + "days": [ + { + "id": 118, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2012", + "progress": 0, + "numberOfProblems": 7, + "numberOfSolved": 0, + "problems": [ + { + "id": "1179", + "available": 1, + "doctype": 4, + "name": "Millennium", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1781, + "submissions": 2833, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 78.6092481468408, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1180", + "available": 1, + "doctype": 4, + "name": "Recurring Decimals", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1300, + "submissions": 2458, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 65.98860862489829, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1181", + "available": 1, + "doctype": 4, + "name": "Biased Dice", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 578, + "submissions": 1236, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 61.32686084142395, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1182", + "available": 1, + "doctype": 4, + "name": "Railway Connection", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 524, + "submissions": 1671, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 39.796529024536206, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1183", + "available": 2, + "doctype": 4, + "name": "Chain-Confined Path", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 365, + "submissions": 663, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 74.05731523378583, + "score": 0.3506849315068493, + "userScore": 0 + }, + { + "id": "1184", + "available": 2, + "doctype": 4, + "name": "Generic Poker", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 45, + "submissions": 99, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 55.55555555555556, + "score": 2.8444444444444446, + "userScore": 0 + }, + { + "id": "1185", + "available": 1, + "doctype": 4, + "name": "Patisserie ACM", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 74, + "submissions": 181, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 56.353591160220994, + "score": 1.7297297297297298, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2013", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2013, + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "days": [ + { + "id": 139, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2013", + "progress": 0, + "numberOfProblems": 6, + "numberOfSolved": 0, + "problems": [ + { + "id": "1186", + "available": 1, + "doctype": 4, + "name": "Integral Rectangles", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1417, + "submissions": 3603, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 52.03996669442132, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1187", + "available": 1, + "doctype": 4, + "name": "ICPC Ranking", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1033, + "submissions": 2144, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.62873134328358, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1188", + "available": 1, + "doctype": 4, + "name": "Hierarchical Democracy", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 908, + "submissions": 1380, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 83.1159420289855, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1189", + "available": 1, + "doctype": 4, + "name": "Prime Caves", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 534, + "submissions": 1489, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.06380120886501, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1190", + "available": 2, + "doctype": 4, + "name": "Anchored Balloon", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 258, + "submissions": 695, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 55.10791366906475, + "score": 0.49612403100775193, + "userScore": 0 + }, + { + "id": "1191", + "available": 1, + "doctype": 4, + "name": "Rotate and Rewrite", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 55, + "submissions": 184, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 38.04347826086956, + "score": 2.327272727272727, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2014", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2014, + "progress": 0, + "numberOfProblems": 7, + "numberOfSolved": 0, + "days": [ + { + "id": 153, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2014", + "progress": 0, + "numberOfProblems": 7, + "numberOfSolved": 0, + "problems": [ + { + "id": "1192", + "available": 1, + "doctype": 4, + "name": "Tax Rate Changed", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 2088, + "submissions": 5764, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.47467036780014, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1193", + "available": 1, + "doctype": 4, + "name": "Chain Disappearance Puzzle", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1700, + "submissions": 3198, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 64.60287679799875, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1194", + "available": 2, + "doctype": 4, + "name": "Vampire", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 622, + "submissions": 1748, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 44.05034324942792, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1195", + "available": 1, + "doctype": 4, + "name": "Encryption System", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 442, + "submissions": 2039, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 31.535066208925944, + "score": 0.2895927601809955, + "userScore": 0 + }, + { + "id": "1196", + "available": 1, + "doctype": 4, + "name": "Bridge Removal", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 454, + "submissions": 949, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.9041095890411, + "score": 0.28193832599118945, + "userScore": 0 + }, + { + "id": "1197", + "available": 1, + "doctype": 4, + "name": "A Die Maker", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 87, + "submissions": 272, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 49.26470588235294, + "score": 1.471264367816092, + "userScore": 0 + }, + { + "id": "1198", + "available": 1, + "doctype": 4, + "name": "Don't Cross the Circles!", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 69, + "submissions": 228, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.10526315789474, + "score": 1.855072463768116, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2015", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2015, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 177, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2015", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1600", + "available": 1, + "doctype": 4, + "name": "Entrance Examination", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 1429, + "submissions": 2349, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 71.09408258833547, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1601", + "available": 1, + "doctype": 4, + "name": "Short Phrase", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 1030, + "submissions": 1701, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 76.89594356261023, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1602", + "available": 1, + "doctype": 4, + "name": "ICPC Calculator", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 720, + "submissions": 1554, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 63.44916344916345, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1603", + "available": 1, + "doctype": 4, + "name": "500-yen Saving", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 287, + "submissions": 1121, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 33.80909901873327, + "score": 0.445993031358885, + "userScore": 0 + }, + { + "id": "1604", + "available": 1, + "doctype": 4, + "name": "Deadlock Detection", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 155, + "submissions": 446, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.309417040358746, + "score": 0.8258064516129032, + "userScore": 0 + }, + { + "id": "1605", + "available": 1, + "doctype": 4, + "name": "Bridge Construction Planning", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 94, + "submissions": 341, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.22873900293255, + "score": 1.3617021276595744, + "userScore": 0 + }, + { + "id": "1606", + "available": 2, + "doctype": 4, + "name": "Complex Paper Folding", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 17, + "submissions": 53, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.283018867924525, + "score": 7.529411764705882, + "userScore": 0 + }, + { + "id": "1607", + "available": 1, + "doctype": 4, + "name": "Development of Small Flying Robots", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 18, + "submissions": 141, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 17.02127659574468, + "score": 7.111111111111111, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2016", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2016, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 187, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2016", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1608", + "available": 1, + "doctype": 4, + "name": "Selection of Participants of an Experiment", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 1735, + "submissions": 3521, + "recommendations": 4, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.84691848906561, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1609", + "available": 1, + "doctype": 4, + "name": "Look for the Winner!", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 917, + "submissions": 1714, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 62.54375729288215, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1610", + "available": 1, + "doctype": 4, + "name": "Bamboo Blossoms", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 910, + "submissions": 2062, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 56.35305528612997, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1611", + "available": 1, + "doctype": 4, + "name": "Daruma Otoshi", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 1794, + "submissions": 5588, + "recommendations": 5, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 46.20615604867574, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1612", + "available": 1, + "doctype": 4, + "name": "3D Printing", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 202, + "submissions": 583, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 39.62264150943396, + "score": 0.6336633663366337, + "userScore": 0 + }, + { + "id": "1613", + "available": 1, + "doctype": 4, + "name": "Deciphering Characters", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 138, + "submissions": 358, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.76536312849162, + "score": 0.927536231884058, + "userScore": 0 + }, + { + "id": "1614", + "available": 2, + "doctype": 4, + "name": "Warp Drive", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 12, + "submissions": 102, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 18.627450980392158, + "score": 10.666666666666666, + "userScore": 0 + }, + { + "id": "1615", + "available": 1, + "doctype": 4, + "name": "Gift Exchange Party", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 107, + "submissions": 360, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 53.888888888888886, + "score": 1.1962616822429906, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2017", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2017, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 200, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2017", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1616", + "available": 1, + "doctype": 4, + "name": "Taro's Shopping", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 1547, + "submissions": 3671, + "recommendations": 6, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 54.807954235903026, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1617", + "available": 1, + "doctype": 4, + "name": "Almost Identical Programs", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 875, + "submissions": 2279, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 48.179025888547606, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1618", + "available": 1, + "doctype": 4, + "name": "A Garden with Ponds", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 682, + "submissions": 970, + "recommendations": 3, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 81.75257731958763, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1619", + "available": 1, + "doctype": 4, + "name": "Making Lunch Boxes", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 369, + "submissions": 1889, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.851244044467972, + "score": 0.34688346883468835, + "userScore": 0 + }, + { + "id": "1620", + "available": 1, + "doctype": 4, + "name": "Boolean Expression Compressor", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 151, + "submissions": 465, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 41.935483870967744, + "score": 0.847682119205298, + "userScore": 0 + }, + { + "id": "1621", + "available": 1, + "doctype": 4, + "name": "Folding a Ribbon", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 185, + "submissions": 246, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 80.89430894308943, + "score": 0.6918918918918919, + "userScore": 0 + }, + { + "id": "1622", + "available": 1, + "doctype": 4, + "name": "Go around the Labyrinth", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 155, + "submissions": 672, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.125, + "score": 0.8258064516129032, + "userScore": 0 + }, + { + "id": "1623", + "available": 1, + "doctype": 4, + "name": "Equivalent Deformation", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 44, + "submissions": 132, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.45454545454545, + "score": 2.909090909090909, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2018", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2018, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 218, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic 2018", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1624", + "available": 1, + "doctype": 4, + "name": "Income Inequality", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 1551, + "submissions": 2827, + "recommendations": 4, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 67.13830916165547, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1625", + "available": 1, + "doctype": 4, + "name": "Origami, or the art of folding paper", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 637, + "submissions": 2255, + "recommendations": 3, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 36.008869179600886, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1626", + "available": 1, + "doctype": 4, + "name": "Skyscraper MinatoHarukas", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 726, + "submissions": 2227, + "recommendations": 4, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 43.37674000898069, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1627", + "available": 1, + "doctype": 4, + "name": "Playoff by all the teams", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 394, + "submissions": 862, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 61.25290023201856, + "score": 0.3248730964467005, + "userScore": 0 + }, + { + "id": "1628", + "available": 1, + "doctype": 4, + "name": "Floating-Point Numbers", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 163, + "submissions": 278, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 67.98561151079137, + "score": 0.7852760736196319, + "userScore": 0 + }, + { + "id": "1629", + "available": 2, + "doctype": 4, + "name": "Equilateral Triangular Fence", + "problemTimeLimit": 15, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 72, + "submissions": 381, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 22.04724409448819, + "score": 1.7777777777777777, + "userScore": 0 + }, + { + "id": "1630", + "available": 1, + "doctype": 4, + "name": "Expression Mining", + "problemTimeLimit": 8, + "problemMemoryLimit": 1048576, + "maxScore": 0, + "solvedUser": 61, + "submissions": 301, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 23.588039867109636, + "score": 2.098360655737705, + "userScore": 0 + }, + { + "id": "1631", + "available": 1, + "doctype": 4, + "name": "For Programming Excellence", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 33, + "submissions": 176, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 29.545454545454547, + "score": 3.878787878787879, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2019", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2019, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 239, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Japan Domestic", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1632", + "available": 1, + "doctype": 4, + "name": "Scores of Final Examination", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 963, + "submissions": 1986, + "recommendations": 3, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 59.06344410876133, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1633", + "available": 1, + "doctype": 4, + "name": "On-Screen Keyboard", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 663, + "submissions": 982, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 81.56822810590631, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1634", + "available": 1, + "doctype": 4, + "name": "Balance Scale", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 340, + "submissions": 1427, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 32.936229852838125, + "score": 0.3764705882352941, + "userScore": 0 + }, + { + "id": "1635", + "available": 1, + "doctype": 4, + "name": "Tally Counters", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 208, + "submissions": 736, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 36.41304347826087, + "score": 0.6153846153846154, + "userScore": 0 + }, + { + "id": "1636", + "available": 1, + "doctype": 4, + "name": "Cube Surface Puzzle", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 111, + "submissions": 386, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.487046632124354, + "score": 1.1531531531531531, + "userScore": 0 + }, + { + "id": "1637", + "available": 1, + "doctype": 4, + "name": "Flipping Colors", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 61, + "submissions": 250, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 31.6, + "score": 2.098360655737705, + "userScore": 0 + }, + { + "id": "1638", + "available": 1, + "doctype": 4, + "name": "Let's Move Tiles!", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 13, + "submissions": 27, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.851851851851855, + "score": 9.846153846153847, + "userScore": 0 + }, + { + "id": "1639", + "available": 1, + "doctype": 4, + "name": "Addition on Convex Polygons", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 18, + "submissions": 54, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 48.148148148148145, + "score": 7.111111111111111, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2020", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2020, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 261, + "day": 1, + "title": "International Collegiate Programming Contest, Japan Domestic", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1640", + "available": 1, + "doctype": 4, + "name": "Count Up 2020", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 765, + "submissions": 1455, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 63.36769759450172, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1641", + "available": 1, + "doctype": 4, + "name": "Contact Tracer", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 505, + "submissions": 916, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 66.5938864628821, + "score": 0.25346534653465347, + "userScore": 0 + }, + { + "id": "1642", + "available": 1, + "doctype": 4, + "name": "Luggage", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 126, + "submissions": 1612, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 12.71712158808933, + "score": 1.0158730158730158, + "userScore": 0 + }, + { + "id": "1643", + "available": 1, + "doctype": 4, + "name": "Icpcan Alphabet", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 128, + "submissions": 306, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.63398692810458, + "score": 1, + "userScore": 0 + }, + { + "id": "1644", + "available": 1, + "doctype": 4, + "name": "Keima", + "problemTimeLimit": 8, + "problemMemoryLimit": 1048576, + "maxScore": 0, + "solvedUser": 47, + "submissions": 139, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 41.726618705035975, + "score": 2.723404255319149, + "userScore": 0 + }, + { + "id": "1645", + "available": 1, + "doctype": 4, + "name": "Evacuation Site", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 54, + "submissions": 332, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 26.204819277108435, + "score": 2.3703703703703702, + "userScore": 0 + }, + { + "id": "1646", + "available": 1, + "doctype": 4, + "name": "Avoiding Three Cs", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 4, + "submissions": 25, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28, + "score": 16, + "userScore": 0 + }, + { + "id": "1647", + "available": 2, + "doctype": 4, + "name": "Idealistic Canister", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 11, + "submissions": 114, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.07017543859649, + "score": 11.636363636363637, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2021", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2021, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 275, + "day": 1, + "title": "International Collegiate Programming Contest, Japan Domestic", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1648", + "available": 1, + "doctype": 4, + "name": "Marbles Tell Your Lucky Number", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 402, + "submissions": 827, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.28295042321645, + "score": 0.31840796019900497, + "userScore": 0 + }, + { + "id": "1649", + "available": 1, + "doctype": 4, + "name": "Hundred-Cell Calculation Puzzles", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 235, + "submissions": 696, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.8448275862069, + "score": 0.5446808510638298, + "userScore": 0 + }, + { + "id": "1650", + "available": 1, + "doctype": 4, + "name": "Tree Transformation Puzzle", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 84, + "submissions": 294, + "recommendations": 4, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 39.45578231292517, + "score": 1.5238095238095237, + "userScore": 0 + }, + { + "id": "1651", + "available": 1, + "doctype": 4, + "name": "Handing out Balloons", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 118, + "submissions": 516, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 36.627906976744185, + "score": 1.0847457627118644, + "userScore": 0 + }, + { + "id": "1652", + "available": 1, + "doctype": 4, + "name": "Time is Money", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 56, + "submissions": 338, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 18.63905325443787, + "score": 2.2857142857142856, + "userScore": 0 + }, + { + "id": "1653", + "available": 3, + "doctype": 4, + "name": "Princess' Perfectionism", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 10, + "submissions": 58, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 17.24137931034483, + "score": 12.8, + "userScore": 0 + }, + { + "id": "1654", + "available": 1, + "doctype": 4, + "name": "Positioning the Lights", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 2, + "submissions": 10, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 30, + "score": 16, + "userScore": 0 + }, + { + "id": "1655", + "available": 3, + "doctype": 4, + "name": "Ninja Escape", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 0, + "submissions": 0, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 0, + "score": 0, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2022", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2022, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 293, + "day": 1, + "title": "International Collegiate Programming Contest, Japan Domestic", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1656", + "available": 1, + "doctype": 4, + "name": "Counting Peaks of Infection", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 432, + "submissions": 794, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 62.72040302267003, + "score": 0.2962962962962963, + "userScore": 0 + }, + { + "id": "1657", + "available": 1, + "doctype": 4, + "name": "Leave No One Behind", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 213, + "submissions": 425, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 60.470588235294116, + "score": 0.6009389671361502, + "userScore": 0 + }, + { + "id": "1658", + "available": 1, + "doctype": 4, + "name": "Training Schedule for ICPC", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 160, + "submissions": 406, + "recommendations": 5, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.364532019704434, + "score": 0.8, + "userScore": 0 + }, + { + "id": "1659", + "available": 1, + "doctype": 4, + "name": "Audience Queue", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 78, + "submissions": 280, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 33.57142857142857, + "score": 1.641025641025641, + "userScore": 0 + }, + { + "id": "1660", + "available": 3, + "doctype": 4, + "name": "Village of Lore", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 25, + "submissions": 137, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 19.708029197080293, + "score": 5.12, + "userScore": 0 + }, + { + "id": "1661", + "available": 1, + "doctype": 4, + "name": "Trim It Step by Step", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 21, + "submissions": 60, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40, + "score": 6.095238095238095, + "userScore": 0 + }, + { + "id": "1662", + "available": 3, + "doctype": 4, + "name": "Keep in Touch", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 11, + "submissions": 78, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 23.076923076923077, + "score": 11.636363636363637, + "userScore": 0 + }, + { + "id": "1663", + "available": 1, + "doctype": 4, + "name": "Artist in Agony", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 4, + "submissions": 32, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 12.5, + "score": 16, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2023", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2023, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 310, + "day": 1, + "title": "International Collegiate Programming Contest, Japan Domestic", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1664", + "available": 1, + "doctype": 4, + "name": "Which Team Should Receive the Sponsor Prize?", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 464, + "submissions": 979, + "recommendations": 4, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 60.674157303370784, + "score": 0.27586206896551724, + "userScore": 0 + }, + { + "id": "1665", + "available": 1, + "doctype": 4, + "name": "Amidakuji", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 217, + "submissions": 670, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40.44776119402985, + "score": 0.5898617511520737, + "userScore": 0 + }, + { + "id": "1666", + "available": 3, + "doctype": 4, + "name": "Changing the Sitting Arrangement", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 124, + "submissions": 368, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40.76086956521739, + "score": 1.032258064516129, + "userScore": 0 + }, + { + "id": "1667", + "available": 1, + "doctype": 4, + "name": "Efficient Problem Set", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 98, + "submissions": 502, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 27.290836653386453, + "score": 1.3061224489795917, + "userScore": 0 + }, + { + "id": "1668", + "available": 1, + "doctype": 4, + "name": "Tampered Records", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 45, + "submissions": 187, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 32.62032085561497, + "score": 2.8444444444444446, + "userScore": 0 + }, + { + "id": "1669", + "available": 1, + "doctype": 4, + "name": "Villa of Emblem Shape", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 26, + "submissions": 68, + "recommendations": 3, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 44.11764705882353, + "score": 4.923076923076923, + "userScore": 0 + }, + { + "id": "1670", + "available": 1, + "doctype": 4, + "name": "Fair Deal of Dice", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 22, + "submissions": 75, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.333333333333336, + "score": 5.818181818181818, + "userScore": 0 + }, + { + "id": "1671", + "available": 1, + "doctype": 4, + "name": "Planning Locations of Bus Stops", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 2, + "submissions": 8, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 25, + "score": 16, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2024", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2024, + "progress": 0, + "numberOfProblems": 9, + "numberOfSolved": 0, + "days": [ + { + "id": 318, + "day": 1, + "title": "International Collegiate Programming Contest, Japan Domestic", + "progress": 0, + "numberOfProblems": 9, + "numberOfSolved": 0, + "problems": [ + { + "id": "1672", + "available": 1, + "doctype": 4, + "name": "Snacks within 300 Yen", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 229, + "submissions": 465, + "recommendations": 3, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.27956989247312, + "score": 0.5589519650655022, + "userScore": 0 + }, + { + "id": "1673", + "available": 1, + "doctype": 4, + "name": "Overtaking", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 185, + "submissions": 378, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 55.55555555555556, + "score": 0.6918918918918919, + "userScore": 0 + }, + { + "id": "1674", + "available": 1, + "doctype": 4, + "name": "Honeycomb Distance", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 140, + "submissions": 260, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 68.84615384615384, + "score": 0.9142857142857143, + "userScore": 0 + }, + { + "id": "1675", + "available": 1, + "doctype": 4, + "name": "A Bug That's Not a Pill Bug", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 78, + "submissions": 300, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 52.333333333333336, + "score": 1.641025641025641, + "userScore": 0 + }, + { + "id": "1676", + "available": 3, + "doctype": 4, + "name": "Colorful Residential Area", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 38, + "submissions": 165, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 32.72727272727273, + "score": 3.3684210526315788, + "userScore": 0 + }, + { + "id": "1677", + "available": 1, + "doctype": 4, + "name": "Billiards", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 24, + "submissions": 237, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 16.033755274261605, + "score": 5.333333333333333, + "userScore": 0 + }, + { + "id": "1678", + "available": 3, + "doctype": 4, + "name": "Two Sets of Cards", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 17, + "submissions": 105, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 17.142857142857142, + "score": 7.529411764705882, + "userScore": 0 + }, + { + "id": "1679", + "available": 1, + "doctype": 4, + "name": "Blocking the Way", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 1, + "submissions": 6, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 16.666666666666668, + "score": 16, + "userScore": 0 + }, + { + "id": "1680", + "available": 3, + "doctype": 4, + "name": "All Survived?", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 2, + "submissions": 41, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 7.317073170731708, + "score": 16, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCPrelim2025", + "largeCl": "ICPC", + "middleCl": "Prelim", + "year": 2025, + "progress": 0, + "numberOfProblems": 9, + "numberOfSolved": 0, + "days": [ + { + "id": 335, + "day": 1, + "title": "International Collegiate Programming Contest, Japan Domestic", + "progress": 0, + "numberOfProblems": 9, + "numberOfSolved": 0, + "problems": [ + { + "id": "1681", + "available": 1, + "doctype": 4, + "name": "2025", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 68, + "submissions": 125, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 66.4, + "score": 1.8823529411764706, + "userScore": 0 + }, + { + "id": "1682", + "available": 1, + "doctype": 4, + "name": "Prefix and Suffix Can Be the Same", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 45, + "submissions": 76, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 63.1578947368421, + "score": 2.8444444444444446, + "userScore": 0 + }, + { + "id": "1683", + "available": 1, + "doctype": 4, + "name": "Calendar of an Enthusiastic Worker", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 43, + "submissions": 96, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.041666666666664, + "score": 2.9767441860465116, + "userScore": 0 + }, + { + "id": "1684", + "available": 1, + "doctype": 4, + "name": "Ancient Game Board", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 20, + "submissions": 63, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 41.26984126984127, + "score": 6.4, + "userScore": 0 + }, + { + "id": "1685", + "available": 3, + "doctype": 4, + "name": "To Be Discontinued", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 21, + "submissions": 51, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.05882352941177, + "score": 6.095238095238095, + "userScore": 0 + }, + { + "id": "1686", + "available": 3, + "doctype": 4, + "name": "Dog Tricks", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 11, + "submissions": 24, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 62.5, + "score": 11.636363636363637, + "userScore": 0 + }, + { + "id": "1687", + "available": 1, + "doctype": 4, + "name": "Number of Faces", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 4, + "submissions": 13, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 30.76923076923077, + "score": 16, + "userScore": 0 + }, + { + "id": "1688", + "available": 1, + "doctype": 4, + "name": "Parentheses", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 2, + "submissions": 3, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 66.66666666666667, + "score": 16, + "userScore": 0 + }, + { + "id": "1689", + "available": 1, + "doctype": 4, + "name": "Preparing the Lunch", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 3, + "submissions": 3, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 100, + "score": 16, + "userScore": 0 + } + ] + } + ] + } + ] +} diff --git a/src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_regional/contests.json b/src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_regional/contests.json new file mode 100644 index 000000000..bf8750f4f --- /dev/null +++ b/src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_regional/contests.json @@ -0,0 +1,5374 @@ +{ + "largeCl": { + "id": "ICPC", + "title": "International Collegiate Programming Contest", + "filter": [ + { + "label": "Prelim", + "value": "prelim" + }, + { + "label": "Regional", + "value": "regional" + } + ], + "middleCls": null + }, + "contests": [ + { + "abbr": "ICPCRegional1998", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 1998, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 49, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 1998, Japan", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1200", + "available": 1, + "doctype": 2, + "name": "Goldbach's Conjecture", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 501, + "submissions": 972, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 62.96296296296296, + "score": 0.2554890219560878, + "userScore": 0 + }, + { + "id": "1201", + "available": 1, + "doctype": 2, + "name": "Lattice Practices", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 90, + "submissions": 167, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 71.25748502994011, + "score": 1.4222222222222223, + "userScore": 0 + }, + { + "id": "1202", + "available": 1, + "doctype": 2, + "name": "Mobile Phone Coverage", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 126, + "submissions": 317, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.110410094637224, + "score": 1.0158730158730158, + "userScore": 0 + }, + { + "id": "1203", + "available": 3, + "doctype": 2, + "name": "Napoleon's Grumble", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 110, + "submissions": 359, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 38.440111420612816, + "score": 1.1636363636363636, + "userScore": 0 + }, + { + "id": "1204", + "available": 1, + "doctype": 2, + "name": "Pipeline Scheduling", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 78, + "submissions": 158, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 56.32911392405063, + "score": 1.641025641025641, + "userScore": 0 + }, + { + "id": "1205", + "available": 0, + "doctype": 2, + "name": "Triangle Partition", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 1, + "submissions": 68, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 2.9411764705882355, + "score": 16, + "userScore": 0 + }, + { + "id": "1206", + "available": 1, + "doctype": 2, + "name": "BUT We Need a Diagram", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 16, + "submissions": 89, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 30.337078651685392, + "score": 8, + "userScore": 0 + }, + { + "id": "1207", + "available": 1, + "doctype": 2, + "name": "Digital Racing Circuil", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 13, + "submissions": 122, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 19.672131147540984, + "score": 9.846153846153847, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional1999", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 1999, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 50, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 1999, Japan", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1208", + "available": 1, + "doctype": 2, + "name": "Rational Irrationals", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 138, + "submissions": 382, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.026178010471206, + "score": 0.927536231884058, + "userScore": 0 + }, + { + "id": "1209", + "available": 1, + "doctype": 2, + "name": "Square Coins", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 295, + "submissions": 421, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 86.69833729216153, + "score": 0.43389830508474575, + "userScore": 0 + }, + { + "id": "1210", + "available": 1, + "doctype": 2, + "name": "Die Game", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 172, + "submissions": 251, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 74.10358565737052, + "score": 0.7441860465116279, + "userScore": 0 + }, + { + "id": "1211", + "available": 1, + "doctype": 2, + "name": "Trapezoids", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 90, + "submissions": 173, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 61.27167630057804, + "score": 1.4222222222222223, + "userScore": 0 + }, + { + "id": "1212", + "available": 1, + "doctype": 2, + "name": "Mirror Illusion", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 57, + "submissions": 116, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 56.89655172413793, + "score": 2.245614035087719, + "userScore": 0 + }, + { + "id": "1213", + "available": 2, + "doctype": 2, + "name": "Heavenly Jewels", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 67, + "submissions": 115, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 70.43478260869566, + "score": 1.9104477611940298, + "userScore": 0 + }, + { + "id": "1214", + "available": 1, + "doctype": 2, + "name": "Walking Ant", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 117, + "submissions": 212, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 62.735849056603776, + "score": 1.0940170940170941, + "userScore": 0 + }, + { + "id": "1215", + "available": 1, + "doctype": 2, + "name": "Co-occurrence Search", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 65, + "submissions": 296, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 27.7027027027027, + "score": 1.9692307692307693, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2000", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2000, + "progress": 0, + "numberOfProblems": 7, + "numberOfSolved": 0, + "days": [ + { + "id": 51, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2000, Japan", + "progress": 0, + "numberOfProblems": 7, + "numberOfSolved": 0, + "problems": [ + { + "id": "1216", + "available": 1, + "doctype": 2, + "name": "Lost in Space", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 97, + "submissions": 189, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 65.60846560846561, + "score": 1.3195876288659794, + "userScore": 0 + }, + { + "id": "1217", + "available": 1, + "doctype": 2, + "name": "Family Tree", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 128, + "submissions": 409, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 38.87530562347188, + "score": 1, + "userScore": 0 + }, + { + "id": "1218", + "available": 1, + "doctype": 2, + "name": "Push!!", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 109, + "submissions": 199, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 66.83417085427136, + "score": 1.1743119266055047, + "userScore": 0 + }, + { + "id": "1219", + "available": 1, + "doctype": 2, + "name": "Pump up Batteries", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 58, + "submissions": 102, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 65.68627450980392, + "score": 2.206896551724138, + "userScore": 0 + }, + { + "id": "1220", + "available": 1, + "doctype": 2, + "name": "The Devil of Gravity", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 7, + "submissions": 41, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 21.951219512195124, + "score": 16, + "userScore": 0 + }, + { + "id": "1221", + "available": 1, + "doctype": 2, + "name": "Numoeba", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 15, + "submissions": 21, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 95.23809523809524, + "score": 8.533333333333333, + "userScore": 0 + }, + { + "id": "1222", + "available": 1, + "doctype": 2, + "name": "Telescope", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 72, + "submissions": 185, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 48.108108108108105, + "score": 1.7777777777777777, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2001", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2001, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 52, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2001, Japan", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1224", + "available": 1, + "doctype": 2, + "name": "Starship Hakodate-maru", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 195, + "submissions": 402, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.208955223880594, + "score": 0.6564102564102564, + "userScore": 0 + }, + { + "id": "1225", + "available": 1, + "doctype": 2, + "name": "e-market", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 62, + "submissions": 166, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.16867469879518, + "score": 2.064516129032258, + "userScore": 0 + }, + { + "id": "1226", + "available": 2, + "doctype": 2, + "name": "Fishnet", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 72, + "submissions": 90, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 91.11111111111111, + "score": 1.7777777777777777, + "userScore": 0 + }, + { + "id": "1227", + "available": 3, + "doctype": 2, + "name": "77377", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 76, + "submissions": 149, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 60.40268456375839, + "score": 1.6842105263157894, + "userScore": 0 + }, + { + "id": "1228", + "available": 1, + "doctype": 2, + "name": "Beehives", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 48, + "submissions": 231, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 27.272727272727273, + "score": 2.6666666666666665, + "userScore": 0 + }, + { + "id": "1229", + "available": 1, + "doctype": 2, + "name": "Young, Poor and Busy", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 43, + "submissions": 158, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 44.936708860759495, + "score": 2.9767441860465116, + "userScore": 0 + }, + { + "id": "1230", + "available": 1, + "doctype": 2, + "name": "Nim", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 77, + "submissions": 148, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 61.486486486486484, + "score": 1.6623376623376624, + "userScore": 0 + }, + { + "id": "1231", + "available": 2, + "doctype": 2, + "name": "Super Star", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 108, + "submissions": 553, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 34.719710669077756, + "score": 1.1851851851851851, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2002", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2002, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 53, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2002, Japan", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1232", + "available": 1, + "doctype": 2, + "name": "Calling Extraterrestrial Intelligence Again", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 503, + "submissions": 1432, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 44.832402234636874, + "score": 0.2544731610337972, + "userScore": 0 + }, + { + "id": "1233", + "available": 1, + "doctype": 2, + "name": "Equals are Equals", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 81, + "submissions": 262, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.74809160305343, + "score": 1.5802469135802468, + "userScore": 0 + }, + { + "id": "1234", + "available": 2, + "doctype": 2, + "name": "GIGA Universe Cup", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 54, + "submissions": 133, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 53.38345864661654, + "score": 2.3703703703703702, + "userScore": 0 + }, + { + "id": "1235", + "available": 1, + "doctype": 2, + "name": "Life Line", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 166, + "submissions": 197, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 92.89340101522842, + "score": 0.7710843373493976, + "userScore": 0 + }, + { + "id": "1236", + "available": 1, + "doctype": 2, + "name": "Map of Ninja House", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 190, + "submissions": 515, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 43.883495145631066, + "score": 0.6736842105263158, + "userScore": 0 + }, + { + "id": "1237", + "available": 1, + "doctype": 2, + "name": "Shredding Company", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 334, + "submissions": 512, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 70.5078125, + "score": 0.38323353293413176, + "userScore": 0 + }, + { + "id": "1238", + "available": 1, + "doctype": 2, + "name": "True Liars", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 166, + "submissions": 570, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 35.26315789473684, + "score": 0.7710843373493976, + "userScore": 0 + }, + { + "id": "1239", + "available": 1, + "doctype": 2, + "name": "Viva Confetti", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 17, + "submissions": 76, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.36842105263158, + "score": 7.529411764705882, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2003", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2003, + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "days": [ + { + "id": 54, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2003, Japan", + "progress": 0, + "numberOfProblems": 8, + "numberOfSolved": 0, + "problems": [ + { + "id": "1240", + "available": 1, + "doctype": 2, + "name": "Unreliable Message", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 593, + "submissions": 922, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 68.65509761388286, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1241", + "available": 1, + "doctype": 2, + "name": "Lagrange's Four-Square Theorem", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 501, + "submissions": 1122, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 63.101604278074866, + "score": 0.2554890219560878, + "userScore": 0 + }, + { + "id": "1242", + "available": 1, + "doctype": 2, + "name": "Area of Polygons", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 107, + "submissions": 303, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.524752475247524, + "score": 1.1962616822429906, + "userScore": 0 + }, + { + "id": "1243", + "available": 1, + "doctype": 2, + "name": "Weather Forecast", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 188, + "submissions": 618, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 37.37864077669903, + "score": 0.6808510638297872, + "userScore": 0 + }, + { + "id": "1244", + "available": 1, + "doctype": 2, + "name": "Molecular Formula", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 317, + "submissions": 537, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 69.08752327746741, + "score": 0.4037854889589905, + "userScore": 0 + }, + { + "id": "1245", + "available": 1, + "doctype": 2, + "name": "Gap", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 108, + "submissions": 207, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 72.46376811594203, + "score": 1.1851851851851851, + "userScore": 0 + }, + { + "id": "1246", + "available": 1, + "doctype": 2, + "name": "Concert Hall Scheduling", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 207, + "submissions": 455, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.46153846153846, + "score": 0.6183574879227053, + "userScore": 0 + }, + { + "id": "1247", + "available": 1, + "doctype": 2, + "name": "Monster Trap", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 23, + "submissions": 125, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 46.4, + "score": 5.565217391304348, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2004", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2004, + "progress": 0, + "numberOfProblems": 9, + "numberOfSolved": 0, + "days": [ + { + "id": 55, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2004, Japan", + "progress": 0, + "numberOfProblems": 9, + "numberOfSolved": 0, + "problems": [ + { + "id": "1248", + "available": 1, + "doctype": 2, + "name": "The Balance", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 326, + "submissions": 986, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.393509127789045, + "score": 0.39263803680981596, + "userScore": 0 + }, + { + "id": "1249", + "available": 1, + "doctype": 2, + "name": "Make a Sequence", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 387, + "submissions": 950, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 49.1578947368421, + "score": 0.330749354005168, + "userScore": 0 + }, + { + "id": "1250", + "available": 1, + "doctype": 2, + "name": "Leaky Cryptography", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 286, + "submissions": 411, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 79.56204379562044, + "score": 0.44755244755244755, + "userScore": 0 + }, + { + "id": "1251", + "available": 1, + "doctype": 2, + "name": "Pathological Paths", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 118, + "submissions": 320, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 46.5625, + "score": 1.0847457627118644, + "userScore": 0 + }, + { + "id": "1252", + "available": 1, + "doctype": 2, + "name": "Confusing Login Names", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 120, + "submissions": 556, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 34.89208633093525, + "score": 1.0666666666666667, + "userScore": 0 + }, + { + "id": "1253", + "available": 1, + "doctype": 2, + "name": "Dice Puzzle", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 112, + "submissions": 171, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 74.85380116959064, + "score": 1.1428571428571428, + "userScore": 0 + }, + { + "id": "1254", + "available": 1, + "doctype": 2, + "name": "Color the Map", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 128, + "submissions": 408, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40.19607843137255, + "score": 1, + "userScore": 0 + }, + { + "id": "1255", + "available": 1, + "doctype": 2, + "name": "Inherit the Spheres", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 51, + "submissions": 107, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 54.205607476635514, + "score": 2.5098039215686274, + "userScore": 0 + }, + { + "id": "1256", + "available": 2, + "doctype": 2, + "name": "Crossing Prisms", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 12, + "submissions": 29, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.62068965517241, + "score": 10.666666666666666, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2005", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2005, + "progress": 0, + "numberOfProblems": 9, + "numberOfSolved": 0, + "days": [ + { + "id": 56, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2005, Japan", + "progress": 0, + "numberOfProblems": 9, + "numberOfSolved": 0, + "problems": [ + { + "id": "1257", + "available": 1, + "doctype": 2, + "name": "Sum of Consecutive prime Numbers", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 425, + "submissions": 943, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 67.44432661717921, + "score": 0.30117647058823527, + "userScore": 0 + }, + { + "id": "1258", + "available": 1, + "doctype": 2, + "name": "Book Replacement", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 82, + "submissions": 193, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 62.69430051813472, + "score": 1.5609756097560976, + "userScore": 0 + }, + { + "id": "1259", + "available": 1, + "doctype": 2, + "name": "Colored Cubes", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 94, + "submissions": 243, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 56.37860082304527, + "score": 1.3617021276595744, + "userScore": 0 + }, + { + "id": "1260", + "available": 1, + "doctype": 2, + "name": "Organize Your Train", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 35, + "submissions": 178, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 33.146067415730336, + "score": 3.657142857142857, + "userScore": 0 + }, + { + "id": "1261", + "available": 2, + "doctype": 2, + "name": "Mobile Computing", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 71, + "submissions": 292, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 43.15068493150685, + "score": 1.8028169014084507, + "userScore": 0 + }, + { + "id": "1262", + "available": 2, + "doctype": 2, + "name": "Atomic Car Race", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 88, + "submissions": 183, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 68.85245901639344, + "score": 1.4545454545454546, + "userScore": 0 + }, + { + "id": "1263", + "available": 1, + "doctype": 2, + "name": "Network Mess", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 45, + "submissions": 132, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 48.484848484848484, + "score": 2.8444444444444446, + "userScore": 0 + }, + { + "id": "1264", + "available": 1, + "doctype": 2, + "name": "Bingo", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 22, + "submissions": 97, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 60.824742268041234, + "score": 5.818181818181818, + "userScore": 0 + }, + { + "id": "1265", + "available": 2, + "doctype": 2, + "name": "Shy Polygons", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 17, + "submissions": 47, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 65.95744680851064, + "score": 7.529411764705882, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2006", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2006, + "progress": 0, + "numberOfProblems": 9, + "numberOfSolved": 0, + "days": [ + { + "id": 57, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2006, Japan", + "progress": 0, + "numberOfProblems": 9, + "numberOfSolved": 0, + "problems": [ + { + "id": "1266", + "available": 1, + "doctype": 2, + "name": "How I Wonder What You Are!", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 124, + "submissions": 175, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 84, + "score": 1.032258064516129, + "userScore": 0 + }, + { + "id": "1267", + "available": 1, + "doctype": 2, + "name": "How I Mathematician Wonder What You Are!", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 94, + "submissions": 218, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 54.58715596330275, + "score": 1.3617021276595744, + "userScore": 0 + }, + { + "id": "1268", + "available": 1, + "doctype": 2, + "name": "Cubic Eight-Puzzle", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 54, + "submissions": 299, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 37.123745819397996, + "score": 2.3703703703703702, + "userScore": 0 + }, + { + "id": "1269", + "available": 1, + "doctype": 2, + "name": "Sum of Different Primes", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 199, + "submissions": 385, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 64.93506493506493, + "score": 0.6432160804020101, + "userScore": 0 + }, + { + "id": "1270", + "available": 1, + "doctype": 2, + "name": "Manhattan Wiring", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 23, + "submissions": 175, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.142857142857146, + "score": 5.565217391304348, + "userScore": 0 + }, + { + "id": "1271", + "available": 1, + "doctype": 2, + "name": "Power Calculus", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 83, + "submissions": 310, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.74193548387097, + "score": 1.5421686746987953, + "userScore": 0 + }, + { + "id": "1272", + "available": 1, + "doctype": 2, + "name": "Polygons on the Grid", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 19, + "submissions": 84, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 53.57142857142857, + "score": 6.7368421052631575, + "userScore": 0 + }, + { + "id": "1273", + "available": 1, + "doctype": 2, + "name": "The Best Name for Your Baby", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 19, + "submissions": 86, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 27.906976744186046, + "score": 6.7368421052631575, + "userScore": 0 + }, + { + "id": "1274", + "available": 1, + "doctype": 2, + "name": "Enjoyable Commutation", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 13, + "submissions": 99, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 23.232323232323232, + "score": 9.846153846153847, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2007", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2007, + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "days": [ + { + "id": 58, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2007, Japan", + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "problems": [ + { + "id": "1275", + "available": 1, + "doctype": 2, + "name": "And Then There Was One", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 569, + "submissions": 1143, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 63.25459317585302, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1276", + "available": 1, + "doctype": 2, + "name": "Prime Gap", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 786, + "submissions": 1172, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 79.77815699658703, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1277", + "available": 2, + "doctype": 2, + "name": "Minimal Backgammon", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 555, + "submissions": 1238, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 57.592891760904685, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1278", + "available": 2, + "doctype": 2, + "name": "Lowest Pyramid", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 24, + "submissions": 194, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.8659793814433, + "score": 5.333333333333333, + "userScore": 0 + }, + { + "id": "1279", + "available": 1, + "doctype": 2, + "name": "Geometric Map", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 74, + "submissions": 217, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 50.69124423963134, + "score": 1.7297297297297298, + "userScore": 0 + }, + { + "id": "1280", + "available": 1, + "doctype": 2, + "name": "Slim Span", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 388, + "submissions": 803, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 72.85180572851806, + "score": 0.32989690721649484, + "userScore": 0 + }, + { + "id": "1281", + "available": 1, + "doctype": 2, + "name": "The Morning after Halloween", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 145, + "submissions": 935, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 32.94117647058823, + "score": 0.8827586206896552, + "userScore": 0 + }, + { + "id": "1282", + "available": 1, + "doctype": 2, + "name": "Bug Hunt", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 272, + "submissions": 597, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 63.651591289782246, + "score": 0.47058823529411764, + "userScore": 0 + }, + { + "id": "1283", + "available": 2, + "doctype": 2, + "name": "Most Distant Point from the Sea", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 192, + "submissions": 594, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.68350168350168, + "score": 0.6666666666666666, + "userScore": 0 + }, + { + "id": "1284", + "available": 1, + "doctype": 2, + "name": "The Teacher's Side of Math", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 44, + "submissions": 118, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 54.23728813559322, + "score": 2.909090909090909, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2008", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2008, + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "days": [ + { + "id": 59, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2008, Japan", + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "problems": [ + { + "id": "1285", + "available": 2, + "doctype": 2, + "name": "Grey Area", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 526, + "submissions": 838, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 69.33174224343675, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1286", + "available": 2, + "doctype": 2, + "name": "Expected Allowance", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 429, + "submissions": 641, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 78.47113884555382, + "score": 0.29836829836829837, + "userScore": 0 + }, + { + "id": "1287", + "available": 1, + "doctype": 2, + "name": "Stopped Watches", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 151, + "submissions": 224, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 78.57142857142857, + "score": 0.847682119205298, + "userScore": 0 + }, + { + "id": "1288", + "available": 1, + "doctype": 2, + "name": "Digits on the Floor", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 82, + "submissions": 192, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 52.083333333333336, + "score": 1.5609756097560976, + "userScore": 0 + }, + { + "id": "1289", + "available": 2, + "doctype": 2, + "name": "Spherical Mirrors", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 114, + "submissions": 201, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 73.13432835820896, + "score": 1.1228070175438596, + "userScore": 0 + }, + { + "id": "1290", + "available": 1, + "doctype": 2, + "name": "Traveling Cube", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 146, + "submissions": 306, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 64.37908496732027, + "score": 0.8767123287671232, + "userScore": 0 + }, + { + "id": "1291", + "available": 1, + "doctype": 2, + "name": "Search of Concatenated Strings", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 164, + "submissions": 730, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 48.63013698630137, + "score": 0.7804878048780488, + "userScore": 0 + }, + { + "id": "1292", + "available": 2, + "doctype": 2, + "name": "Top Spinning", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 34, + "submissions": 84, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.61904761904762, + "score": 3.764705882352941, + "userScore": 0 + }, + { + "id": "1293", + "available": 1, + "doctype": 2, + "name": "Common Polynomial", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 52, + "submissions": 163, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 39.263803680981596, + "score": 2.4615384615384617, + "userScore": 0 + }, + { + "id": "1294", + "available": 2, + "doctype": 2, + "name": "Zigzag", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 43, + "submissions": 163, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.94478527607362, + "score": 2.9767441860465116, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2009", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2009, + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "days": [ + { + "id": 60, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2009, Japan", + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "problems": [ + { + "id": "1295", + "available": 1, + "doctype": 2, + "name": "Cubist Artwork", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 608, + "submissions": 884, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 83.03167420814479, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1296", + "available": 1, + "doctype": 2, + "name": "Repeated Substitution with Sed", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 374, + "submissions": 709, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 65.86741889985896, + "score": 0.3422459893048128, + "userScore": 0 + }, + { + "id": "1297", + "available": 1, + "doctype": 2, + "name": "Swimming Jam", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 181, + "submissions": 393, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.26972010178117, + "score": 0.7071823204419889, + "userScore": 0 + }, + { + "id": "1298", + "available": 1, + "doctype": 2, + "name": "Separate Points", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 231, + "submissions": 797, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 43.28732747804266, + "score": 0.5541125541125541, + "userScore": 0 + }, + { + "id": "1299", + "available": 1, + "doctype": 2, + "name": "Origami Through-Hole", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 15, + "submissions": 80, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 31.25, + "score": 8.533333333333333, + "userScore": 0 + }, + { + "id": "1300", + "available": 1, + "doctype": 2, + "name": "Chemist's Math", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 93, + "submissions": 240, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 56.25, + "score": 1.3763440860215055, + "userScore": 0 + }, + { + "id": "1301", + "available": 2, + "doctype": 2, + "name": "Malfatti Circles", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 151, + "submissions": 388, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 61.597938144329895, + "score": 0.847682119205298, + "userScore": 0 + }, + { + "id": "1302", + "available": 1, + "doctype": 2, + "name": "Twenty Questions", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 267, + "submissions": 737, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 54.952510176390774, + "score": 0.4794007490636704, + "userScore": 0 + }, + { + "id": "1303", + "available": 1, + "doctype": 2, + "name": "Hobby on Rails", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 13, + "submissions": 43, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 44.18604651162791, + "score": 9.846153846153847, + "userScore": 0 + }, + { + "id": "1304", + "available": 1, + "doctype": 2, + "name": "Infected Land", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 150, + "submissions": 326, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 69.01840490797547, + "score": 0.8533333333333334, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2010", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2010, + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "days": [ + { + "id": 61, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2010, Japan", + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "problems": [ + { + "id": "1305", + "available": 1, + "doctype": 2, + "name": "Membership Management", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 465, + "submissions": 1573, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 44.18308963763509, + "score": 0.2752688172043011, + "userScore": 0 + }, + { + "id": "1306", + "available": 1, + "doctype": 2, + "name": "Balloon Collecting", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 368, + "submissions": 866, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 57.621247113163975, + "score": 0.34782608695652173, + "userScore": 0 + }, + { + "id": "1307", + "available": 1, + "doctype": 2, + "name": "Towns along a Highway", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 113, + "submissions": 216, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 68.98148148148148, + "score": 1.1327433628318584, + "userScore": 0 + }, + { + "id": "1308", + "available": 1, + "doctype": 2, + "name": "Awkward Lights", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 222, + "submissions": 539, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 60.667903525046384, + "score": 0.5765765765765766, + "userScore": 0 + }, + { + "id": "1309", + "available": 2, + "doctype": 2, + "name": "The Two Men of the Japanese Alps", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 120, + "submissions": 438, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40.63926940639269, + "score": 1.0666666666666667, + "userScore": 0 + }, + { + "id": "1310", + "available": 1, + "doctype": 2, + "name": "Find the Multiples", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 180, + "submissions": 472, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.90677966101695, + "score": 0.7111111111111111, + "userScore": 0 + }, + { + "id": "1311", + "available": 1, + "doctype": 2, + "name": "Test Case Tweaking", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 219, + "submissions": 500, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 60.2, + "score": 0.5844748858447488, + "userScore": 0 + }, + { + "id": "1312", + "available": 1, + "doctype": 2, + "name": "Where's Wally", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 149, + "submissions": 576, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.916666666666664, + "score": 0.8590604026845637, + "userScore": 0 + }, + { + "id": "1313", + "available": 2, + "doctype": 2, + "name": "Intersection of Two Prisms", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 188, + "submissions": 538, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 55.204460966542754, + "score": 0.6808510638297872, + "userScore": 0 + }, + { + "id": "1314", + "available": 1, + "doctype": 2, + "name": "Matrix Calculator", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 125, + "submissions": 226, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 76.54867256637168, + "score": 1.024, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2011", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2011, + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "days": [ + { + "id": 102, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2011, Japan", + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "problems": [ + { + "id": "1315", + "available": 1, + "doctype": 2, + "name": "Gift from the Goddess of Programming", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 324, + "submissions": 734, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 57.62942779291553, + "score": 0.3950617283950617, + "userScore": 0 + }, + { + "id": "1316", + "available": 1, + "doctype": 2, + "name": "The Sorcerer's Donut", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 387, + "submissions": 734, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 70.29972752043597, + "score": 0.330749354005168, + "userScore": 0 + }, + { + "id": "1317", + "available": 1, + "doctype": 2, + "name": "Weaker than Planned", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 70, + "submissions": 358, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 29.050279329608937, + "score": 1.8285714285714285, + "userScore": 0 + }, + { + "id": "1318", + "available": 1, + "doctype": 2, + "name": "Long Distance Taxi", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 242, + "submissions": 1598, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 24.530663329161452, + "score": 0.5289256198347108, + "userScore": 0 + }, + { + "id": "1319", + "available": 1, + "doctype": 2, + "name": "Driving an Icosahedral Rover", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 47, + "submissions": 152, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 57.89473684210526, + "score": 2.723404255319149, + "userScore": 0 + }, + { + "id": "1320", + "available": 1, + "doctype": 2, + "name": "City Merger", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 313, + "submissions": 1121, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40.856378233719894, + "score": 0.40894568690095845, + "userScore": 0 + }, + { + "id": "1321", + "available": 1, + "doctype": 2, + "name": "Captain Q's Treasure", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 43, + "submissions": 233, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 29.184549356223176, + "score": 2.9767441860465116, + "userScore": 0 + }, + { + "id": "1322", + "available": 1, + "doctype": 2, + "name": "ASCII Expression", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 132, + "submissions": 353, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.35694050991501, + "score": 0.9696969696969697, + "userScore": 0 + }, + { + "id": "1323", + "available": 2, + "doctype": 2, + "name": "Encircling Circles", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 33, + "submissions": 99, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.474747474747474, + "score": 3.878787878787879, + "userScore": 0 + }, + { + "id": "1324", + "available": 1, + "doctype": 2, + "name": "Round Trip", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 85, + "submissions": 443, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 29.79683972911964, + "score": 1.5058823529411764, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2012", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2012, + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "days": [ + { + "id": 129, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2012, Japan", + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "problems": [ + { + "id": "1325", + "available": 1, + "doctype": 2, + "name": "Ginkgo Numbers", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 362, + "submissions": 754, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 64.3236074270557, + "score": 0.35359116022099446, + "userScore": 0 + }, + { + "id": "1326", + "available": 1, + "doctype": 2, + "name": "Stylish", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 236, + "submissions": 493, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 61.054766734279916, + "score": 0.5423728813559322, + "userScore": 0 + }, + { + "id": "1327", + "available": 1, + "doctype": 2, + "name": "One-Dimensional Cellular Automaton", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 372, + "submissions": 752, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 74.86702127659575, + "score": 0.34408602150537637, + "userScore": 0 + }, + { + "id": "1328", + "available": 1, + "doctype": 2, + "name": "Find the Outlier", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 276, + "submissions": 714, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.8235294117647, + "score": 0.463768115942029, + "userScore": 0 + }, + { + "id": "1329", + "available": 1, + "doctype": 2, + "name": "Sliding Block Puzzle", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 89, + "submissions": 413, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.520581113801455, + "score": 1.4382022471910112, + "userScore": 0 + }, + { + "id": "1330", + "available": 1, + "doctype": 2, + "name": "Never Wait for Weights", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 463, + "submissions": 1553, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 44.880875724404376, + "score": 0.27645788336933047, + "userScore": 0 + }, + { + "id": "1331", + "available": 2, + "doctype": 2, + "name": "Let There Be Light", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 146, + "submissions": 481, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.945945945945944, + "score": 0.8767123287671232, + "userScore": 0 + }, + { + "id": "1332", + "available": 1, + "doctype": 2, + "name": "Company Organization", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 28, + "submissions": 197, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.426395939086294, + "score": 4.571428571428571, + "userScore": 0 + }, + { + "id": "1333", + "available": 1, + "doctype": 2, + "name": "Beautiful Spacing", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 111, + "submissions": 549, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 34.97267759562842, + "score": 1.1531531531531531, + "userScore": 0 + }, + { + "id": "1334", + "available": 2, + "doctype": 2, + "name": "Cubic Colonies", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 12, + "submissions": 61, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.622950819672134, + "score": 10.666666666666666, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2013", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2013, + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "days": [ + { + "id": 144, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2013, Japan", + "progress": 0, + "numberOfProblems": 10, + "numberOfSolved": 0, + "problems": [ + { + "id": "1335", + "available": 1, + "doctype": 2, + "name": "Equal Sum Sets", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 597, + "submissions": 899, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 87.43047830923248, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1336", + "available": 1, + "doctype": 2, + "name": "The Last Ant", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 330, + "submissions": 567, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 73.72134038800705, + "score": 0.3878787878787879, + "userScore": 0 + }, + { + "id": "1337", + "available": 1, + "doctype": 2, + "name": "Count the Regions", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 262, + "submissions": 723, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.16459197786999, + "score": 0.48854961832061067, + "userScore": 0 + }, + { + "id": "1338", + "available": 1, + "doctype": 2, + "name": "Clock Hands", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 89, + "submissions": 239, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 55.64853556485355, + "score": 1.4382022471910112, + "userScore": 0 + }, + { + "id": "1339", + "available": 1, + "doctype": 2, + "name": "Dragon's Cruller", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 103, + "submissions": 500, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40.2, + "score": 1.2427184466019416, + "userScore": 0 + }, + { + "id": "1340", + "available": 1, + "doctype": 2, + "name": "Directional Resemblance", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 37, + "submissions": 194, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.876288659793815, + "score": 3.4594594594594597, + "userScore": 0 + }, + { + "id": "1341", + "available": 1, + "doctype": 2, + "name": "Longest Chain", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 105, + "submissions": 748, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 29.545454545454547, + "score": 1.2190476190476192, + "userScore": 0 + }, + { + "id": "1342", + "available": 2, + "doctype": 2, + "name": "Don't Burst the Balloon", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 73, + "submissions": 283, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 37.102473498233216, + "score": 1.7534246575342465, + "userScore": 0 + }, + { + "id": "1343", + "available": 1, + "doctype": 2, + "name": "Hidden Tree", + "problemTimeLimit": 8, + "problemMemoryLimit": 131072, + "maxScore": 0, + "solvedUser": 85, + "submissions": 413, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 32.445520581113804, + "score": 1.5058823529411764, + "userScore": 0 + }, + { + "id": "1344", + "available": 1, + "doctype": 2, + "name": "C(O|W|A*RD*|S)* CROSSWORD Puzzle", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 4, + "submissions": 25, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40, + "score": 16, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2014", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2014, + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "days": [ + { + "id": 154, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2014, Japan", + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "problems": [ + { + "id": "1345", + "available": 1, + "doctype": 2, + "name": "Bit String Reordering", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 424, + "submissions": 807, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 68.64931846344486, + "score": 0.3018867924528302, + "userScore": 0 + }, + { + "id": "1346", + "available": 1, + "doctype": 2, + "name": "Miscalculation", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 502, + "submissions": 956, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 66.31799163179916, + "score": 0.2549800796812749, + "userScore": 0 + }, + { + "id": "1347", + "available": 1, + "doctype": 2, + "name": "Shopping", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 430, + "submissions": 712, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 77.1067415730337, + "score": 0.29767441860465116, + "userScore": 0 + }, + { + "id": "1348", + "available": 2, + "doctype": 2, + "name": "Space Golf", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 148, + "submissions": 373, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 50.402144772117964, + "score": 0.8648648648648649, + "userScore": 0 + }, + { + "id": "1349", + "available": 1, + "doctype": 2, + "name": "Automotive Navigation", + "problemTimeLimit": 5, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 112, + "submissions": 490, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.367346938775512, + "score": 1.1428571428571428, + "userScore": 0 + }, + { + "id": "1350", + "available": 1, + "doctype": 2, + "name": "There is No Alternative", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 358, + "submissions": 1238, + "recommendations": 4, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.64943457189015, + "score": 0.3575418994413408, + "userScore": 0 + }, + { + "id": "1351", + "available": 1, + "doctype": 2, + "name": "Flipping Parentheses", + "problemTimeLimit": 5, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 167, + "submissions": 749, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 37.516688918558074, + "score": 0.7664670658682635, + "userScore": 0 + }, + { + "id": "1352", + "available": 2, + "doctype": 2, + "name": "Cornering at Poles", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 37, + "submissions": 117, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 64.1025641025641, + "score": 3.4594594594594597, + "userScore": 0 + }, + { + "id": "1353", + "available": 1, + "doctype": 2, + "name": "Sweet War", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 54, + "submissions": 189, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 41.26984126984127, + "score": 2.3703703703703702, + "userScore": 0 + }, + { + "id": "1354", + "available": 2, + "doctype": 2, + "name": "Exhibition", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 14, + "submissions": 72, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 36.111111111111114, + "score": 9.142857142857142, + "userScore": 0 + }, + { + "id": "1355", + "available": 1, + "doctype": 2, + "name": "L Jumps", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 14, + "submissions": 44, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.72727272727273, + "score": 9.142857142857142, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2015", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2015, + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "days": [ + { + "id": 172, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2015, Japan", + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "problems": [ + { + "id": "1356", + "available": 1, + "doctype": 2, + "name": "Decimal Sequences", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 530, + "submissions": 1309, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.51795263559969, + "score": 0.25, + "userScore": 0 + }, + { + "id": "1357", + "available": 2, + "doctype": 2, + "name": "Squeeze the Cylinders", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 343, + "submissions": 728, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 57.967032967032964, + "score": 0.37317784256559766, + "userScore": 0 + }, + { + "id": "1358", + "available": 1, + "doctype": 2, + "name": "Sibling Rivalry", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 178, + "submissions": 970, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 33.29896907216495, + "score": 0.7191011235955056, + "userScore": 0 + }, + { + "id": "1359", + "available": 1, + "doctype": 2, + "name": "Wall Clocks", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 142, + "submissions": 513, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 38.98635477582846, + "score": 0.9014084507042254, + "userScore": 0 + }, + { + "id": "1360", + "available": 1, + "doctype": 2, + "name": "Bringing Order to Disorder", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 120, + "submissions": 352, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.23863636363637, + "score": 1.0666666666666667, + "userScore": 0 + }, + { + "id": "1361", + "available": 1, + "doctype": 2, + "name": "Deadlock Detection", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 81, + "submissions": 439, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 30.751708428246015, + "score": 1.5802469135802468, + "userScore": 0 + }, + { + "id": "1362", + "available": 1, + "doctype": 2, + "name": "Do Geese See God?", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 105, + "submissions": 333, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.645645645645644, + "score": 1.2190476190476192, + "userScore": 0 + }, + { + "id": "1363", + "available": 1, + "doctype": 2, + "name": "Rotating Cutter Bits", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 15, + "submissions": 25, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 64, + "score": 8.533333333333333, + "userScore": 0 + }, + { + "id": "1364", + "available": 1, + "doctype": 2, + "name": "Routing a Marathon Race", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 58, + "submissions": 571, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 24.16812609457093, + "score": 2.206896551724138, + "userScore": 0 + }, + { + "id": "1365", + "available": 1, + "doctype": 2, + "name": "Post Office Investigation", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 19, + "submissions": 64, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 39.0625, + "score": 6.7368421052631575, + "userScore": 0 + }, + { + "id": "1366", + "available": 1, + "doctype": 2, + "name": "Min-Max Distance Game", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 26, + "submissions": 154, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 30.51948051948052, + "score": 4.923076923076923, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2016", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2016, + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "days": [ + { + "id": 188, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2016, Japan", + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "problems": [ + { + "id": "1367", + "available": 1, + "doctype": 2, + "name": "Rearranging a Sequence", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 386, + "submissions": 1555, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.852090032154344, + "score": 0.3316062176165803, + "userScore": 0 + }, + { + "id": "1368", + "available": 1, + "doctype": 2, + "name": "Quality of Check Digits", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 255, + "submissions": 682, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 56.598240469208214, + "score": 0.5019607843137255, + "userScore": 0 + }, + { + "id": "1369", + "available": 1, + "doctype": 2, + "name": "Distribution Center", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 244, + "submissions": 1207, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 36.03976801988401, + "score": 0.5245901639344263, + "userScore": 0 + }, + { + "id": "1370", + "available": 1, + "doctype": 2, + "name": "Hidden Anagrams", + "problemTimeLimit": 10, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 226, + "submissions": 1817, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 24.21574023115025, + "score": 0.5663716814159292, + "userScore": 0 + }, + { + "id": "1371", + "available": 1, + "doctype": 2, + "name": "Infallibly Crack Perplexing Cryptarithm", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 121, + "submissions": 430, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 36.74418604651163, + "score": 1.0578512396694215, + "userScore": 0 + }, + { + "id": "1372", + "available": 1, + "doctype": 2, + "name": "Three Kingdoms of Bourdelot", + "problemTimeLimit": 4, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 36, + "submissions": 200, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 29, + "score": 3.5555555555555554, + "userScore": 0 + }, + { + "id": "1373", + "available": 1, + "doctype": 2, + "name": "Placing Medals on a Binary Tree", + "problemTimeLimit": 4, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 142, + "submissions": 839, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 30.75089392133492, + "score": 0.9014084507042254, + "userScore": 0 + }, + { + "id": "1374", + "available": 1, + "doctype": 2, + "name": "Animal Companion in Maze", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 31, + "submissions": 211, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 22.748815165876778, + "score": 4.129032258064516, + "userScore": 0 + }, + { + "id": "1375", + "available": 3, + "doctype": 2, + "name": "Skinny Polygon", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 36, + "submissions": 321, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 17.757009345794394, + "score": 3.5555555555555554, + "userScore": 0 + }, + { + "id": "1376", + "available": 2, + "doctype": 2, + "name": "Cover the Polygon with Your Disk", + "problemTimeLimit": 5, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 26, + "submissions": 417, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 18.705035971223023, + "score": 4.923076923076923, + "userScore": 0 + }, + { + "id": "1377", + "available": 1, + "doctype": 2, + "name": "Black and White Boxes", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 26, + "submissions": 65, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 60, + "score": 4.923076923076923, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2017", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2017, + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "days": [ + { + "id": 210, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2017, Japan", + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "problems": [ + { + "id": "1378", + "available": 1, + "doctype": 2, + "name": "Secret of Chocolate Poles", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 318, + "submissions": 1051, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 67.93529971455756, + "score": 0.4025157232704403, + "userScore": 0 + }, + { + "id": "1379", + "available": 1, + "doctype": 2, + "name": "Parallel Lines", + "problemTimeLimit": 10, + "problemMemoryLimit": 1048576, + "maxScore": 0, + "solvedUser": 213, + "submissions": 1068, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.56554307116105, + "score": 0.6009389671361502, + "userScore": 0 + }, + { + "id": "1380", + "available": 1, + "doctype": 2, + "name": "Medical Checkup", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 202, + "submissions": 1157, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 41.65946413137424, + "score": 0.6336633663366337, + "userScore": 0 + }, + { + "id": "1381", + "available": 2, + "doctype": 2, + "name": "Making Perimeter of the Convex Hull Shortest", + "problemTimeLimit": 10, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 14, + "submissions": 94, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 17.02127659574468, + "score": 9.142857142857142, + "userScore": 0 + }, + { + "id": "1382", + "available": 1, + "doctype": 2, + "name": "Black or White", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 82, + "submissions": 556, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 36.510791366906474, + "score": 1.5609756097560976, + "userScore": 0 + }, + { + "id": "1383", + "available": 1, + "doctype": 2, + "name": "Pizza Delivery", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 137, + "submissions": 1105, + "recommendations": 2, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 26.334841628959275, + "score": 0.9343065693430657, + "userScore": 0 + }, + { + "id": "1384", + "available": 1, + "doctype": 2, + "name": "Rendezvous on a Tetrahedron", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 65, + "submissions": 258, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.286821705426355, + "score": 1.9692307692307693, + "userScore": 0 + }, + { + "id": "1385", + "available": 1, + "doctype": 2, + "name": "Homework", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 32, + "submissions": 114, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 35.96491228070175, + "score": 4, + "userScore": 0 + }, + { + "id": "1386", + "available": 1, + "doctype": 2, + "name": "Starting a Scenic Railroad Service", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 145, + "submissions": 537, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 64.43202979515829, + "score": 0.8827586206896552, + "userScore": 0 + }, + { + "id": "1387", + "available": 1, + "doctype": 2, + "name": "String Puzzle", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 46, + "submissions": 98, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 60.204081632653065, + "score": 2.782608695652174, + "userScore": 0 + }, + { + "id": "1388", + "available": 1, + "doctype": 2, + "name": "Counting Cycles", + "problemTimeLimit": 4, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 54, + "submissions": 385, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.051948051948052, + "score": 2.3703703703703702, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2018", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2018, + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "days": [ + { + "id": 229, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2018, Japan", + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "problems": [ + { + "id": "1389", + "available": 1, + "doctype": 2, + "name": "Digits Are Not Just Characters", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 179, + "submissions": 339, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 58.70206489675516, + "score": 0.7150837988826816, + "userScore": 0 + }, + { + "id": "1390", + "available": 1, + "doctype": 2, + "name": "Arithmetic Progressions", + "problemTimeLimit": 5, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 195, + "submissions": 811, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 29.223181257706536, + "score": 0.6564102564102564, + "userScore": 0 + }, + { + "id": "1391", + "available": 1, + "doctype": 2, + "name": "Emergency Evacuation", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 166, + "submissions": 342, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 59.35672514619883, + "score": 0.7710843373493976, + "userScore": 0 + }, + { + "id": "1392", + "available": 1, + "doctype": 2, + "name": "Shortest Common Non-Subsequence", + "problemTimeLimit": 5, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 141, + "submissions": 448, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40.625, + "score": 0.9078014184397163, + "userScore": 0 + }, + { + "id": "1393", + "available": 3, + "doctype": 2, + "name": "Eulerian Flight Tour", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 58, + "submissions": 263, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 30.418250950570343, + "score": 2.206896551724138, + "userScore": 0 + }, + { + "id": "1394", + "available": 3, + "doctype": 2, + "name": "Fair Chocolate-Cutting", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 12, + "submissions": 105, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 18.095238095238095, + "score": 10.666666666666666, + "userScore": 0 + }, + { + "id": "1395", + "available": 1, + "doctype": 2, + "name": "What Goes Up Must Come Down", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 133, + "submissions": 310, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 53.225806451612904, + "score": 0.9624060150375939, + "userScore": 0 + }, + { + "id": "1396", + "available": 3, + "doctype": 2, + "name": "Four-Coloring", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 20, + "submissions": 96, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 23.958333333333332, + "score": 6.4, + "userScore": 0 + }, + { + "id": "1397", + "available": 1, + "doctype": 2, + "name": "Ranks", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 13, + "submissions": 36, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 72.22222222222223, + "score": 9.846153846153847, + "userScore": 0 + }, + { + "id": "1398", + "available": 1, + "doctype": 2, + "name": "Colorful Tree", + "problemTimeLimit": 5, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 43, + "submissions": 203, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 29.064039408866996, + "score": 2.9767441860465116, + "userScore": 0 + }, + { + "id": "1399", + "available": 1, + "doctype": 2, + "name": "Sixth Sense", + "problemTimeLimit": 5, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 83, + "submissions": 358, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 29.88826815642458, + "score": 1.5421686746987953, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2019", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2019, + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "days": [ + { + "id": 248, + "day": 1, + "title": "ACM International Collegiate Programming Contest, Asia Regional 2019, Japan", + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "problems": [ + { + "id": "1400", + "available": 1, + "doctype": 2, + "name": "Fast Forwarding", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 243, + "submissions": 564, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 60.46099290780142, + "score": 0.5267489711934157, + "userScore": 0 + }, + { + "id": "1401", + "available": 1, + "doctype": 2, + "name": "Estimating the Flood Risk", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 205, + "submissions": 371, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 69.54177897574124, + "score": 0.624390243902439, + "userScore": 0 + }, + { + "id": "1402", + "available": 1, + "doctype": 2, + "name": "Wall Painting", + "problemTimeLimit": 6, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 52, + "submissions": 153, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 38.56209150326797, + "score": 2.4615384615384617, + "userScore": 0 + }, + { + "id": "1403", + "available": 1, + "doctype": 2, + "name": "Twin Trees Bros.", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 24, + "submissions": 159, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 35.22012578616352, + "score": 5.333333333333333, + "userScore": 0 + }, + { + "id": "1404", + "available": 1, + "doctype": 2, + "name": "Reordering the Documents", + "problemTimeLimit": 4, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 134, + "submissions": 576, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 36.80555555555556, + "score": 0.9552238805970149, + "userScore": 0 + }, + { + "id": "1405", + "available": 1, + "doctype": 2, + "name": "Halting Problem", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 39, + "submissions": 317, + "recommendations": 6, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 18.29652996845426, + "score": 3.282051282051282, + "userScore": 0 + }, + { + "id": "1406", + "available": 1, + "doctype": 2, + "name": "Ambiguous Encoding", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 133, + "submissions": 398, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 49.49748743718593, + "score": 0.9624060150375939, + "userScore": 0 + }, + { + "id": "1407", + "available": 1, + "doctype": 2, + "name": "Parentheses Editor", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 164, + "submissions": 472, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 43.220338983050844, + "score": 0.7804878048780488, + "userScore": 0 + }, + { + "id": "1408", + "available": 3, + "doctype": 2, + "name": "One-Way Conveyors", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 78, + "submissions": 323, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 31.269349845201237, + "score": 1.641025641025641, + "userScore": 0 + }, + { + "id": "1409", + "available": 3, + "doctype": 2, + "name": "Fun Region", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 11, + "submissions": 193, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 11.917098445595855, + "score": 11.636363636363637, + "userScore": 0 + }, + { + "id": "1410", + "available": 1, + "doctype": 2, + "name": "Draw in Straight Lines", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 49, + "submissions": 141, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 63.12056737588652, + "score": 2.6122448979591835, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2020", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2020, + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "days": [ + { + "id": 284, + "day": 1, + "title": "International Collegiate Programming Contest, Asia Regional 2020, Japan", + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "problems": [ + { + "id": "1411", + "available": 1, + "doctype": 2, + "name": "Three-Axis Views", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 72, + "submissions": 124, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 62.903225806451616, + "score": 1.7777777777777777, + "userScore": 0 + }, + { + "id": "1412", + "available": 3, + "doctype": 2, + "name": "Secrets of Legendary Treasure", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 51, + "submissions": 136, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 41.911764705882355, + "score": 2.5098039215686274, + "userScore": 0 + }, + { + "id": "1413", + "available": 3, + "doctype": 2, + "name": "Short Coding", + "problemTimeLimit": 5, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 28, + "submissions": 121, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 31.40495867768595, + "score": 4.571428571428571, + "userScore": 0 + }, + { + "id": "1414", + "available": 1, + "doctype": 2, + "name": "Colorful Rectangle", + "problemTimeLimit": 5, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 11, + "submissions": 48, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 29.166666666666668, + "score": 11.636363636363637, + "userScore": 0 + }, + { + "id": "1415", + "available": 3, + "doctype": 2, + "name": "Jewelry Size", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 28, + "submissions": 76, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 39.473684210526315, + "score": 4.571428571428571, + "userScore": 0 + }, + { + "id": "1416", + "available": 3, + "doctype": 2, + "name": "Solar Car", + "problemTimeLimit": 5, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 7, + "submissions": 47, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 25.53191489361702, + "score": 16, + "userScore": 0 + }, + { + "id": "1417", + "available": 1, + "doctype": 2, + "name": "To be Connected or not to be that is the Question", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 34, + "submissions": 88, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 43.18181818181818, + "score": 3.764705882352941, + "userScore": 0 + }, + { + "id": "1418", + "available": 1, + "doctype": 2, + "name": "LCM of GCDs", + "problemTimeLimit": 5, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 38, + "submissions": 88, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 54.54545454545455, + "score": 3.3684210526315788, + "userScore": 0 + }, + { + "id": "1419", + "available": 1, + "doctype": 2, + "name": "High-Tech Detective", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 31, + "submissions": 68, + "recommendations": 1, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.470588235294116, + "score": 4.129032258064516, + "userScore": 0 + }, + { + "id": "1420", + "available": 1, + "doctype": 2, + "name": "Formica Sokobanica", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 54, + "submissions": 149, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 38.92617449664429, + "score": 2.3703703703703702, + "userScore": 0 + }, + { + "id": "1421", + "available": 1, + "doctype": 2, + "name": "Suffixes may Contain Prefixes", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 22, + "submissions": 36, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 61.111111111111114, + "score": 5.818181818181818, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2021", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2021, + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "days": [ + { + "id": 286, + "day": 1, + "title": "International Collegiate Programming Contest, Asia Regional 2021, Japan", + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "problems": [ + { + "id": "1422", + "available": 3, + "doctype": 2, + "name": "Loop of Chocolate", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 80, + "submissions": 100, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 86, + "score": 1.6, + "userScore": 0 + }, + { + "id": "1423", + "available": 1, + "doctype": 2, + "name": "Lottery Fun Time", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 62, + "submissions": 223, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 30.493273542600896, + "score": 2.064516129032258, + "userScore": 0 + }, + { + "id": "1424", + "available": 1, + "doctype": 2, + "name": "Reversible Compressio", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 22, + "submissions": 79, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 34.177215189873415, + "score": 5.818181818181818, + "userScore": 0 + }, + { + "id": "1425", + "available": 1, + "doctype": 2, + "name": "Wireless Communication Network", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 27, + "submissions": 104, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.846153846153847, + "score": 4.7407407407407405, + "userScore": 0 + }, + { + "id": "1426", + "available": 1, + "doctype": 2, + "name": "Planning Railroad Discontinuation", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 9, + "submissions": 19, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.36842105263158, + "score": 14.222222222222221, + "userScore": 0 + }, + { + "id": "1427", + "available": 1, + "doctype": 2, + "name": "It’s Surely Complex", + "problemTimeLimit": 8, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 13, + "submissions": 37, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 37.83783783783784, + "score": 9.846153846153847, + "userScore": 0 + }, + { + "id": "1428", + "available": 1, + "doctype": 2, + "name": "Genealogy of Puppets", + "problemTimeLimit": 1, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 27, + "submissions": 118, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 31.35593220338983, + "score": 4.7407407407407405, + "userScore": 0 + }, + { + "id": "1429", + "available": 0, + "doctype": 2, + "name": "Cancer DNA", + "problemTimeLimit": 4, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 0, + "submissions": 27, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 0, + "score": 0, + "userScore": 0 + }, + { + "id": "1430", + "available": 3, + "doctype": 2, + "name": "Even Division", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 13, + "submissions": 69, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 26.08695652173913, + "score": 9.846153846153847, + "userScore": 0 + }, + { + "id": "1431", + "available": 1, + "doctype": 2, + "name": "The Cross Covers Everything", + "problemTimeLimit": 2, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 47, + "submissions": 193, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 36.78756476683938, + "score": 2.723404255319149, + "userScore": 0 + }, + { + "id": "1432", + "available": 3, + "doctype": 2, + "name": "Distributing the Treasure", + "problemTimeLimit": 3, + "problemMemoryLimit": 262144, + "maxScore": 0, + "solvedUser": 5, + "submissions": 20, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 25, + "score": 16, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2022", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2022, + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "days": [ + { + "id": 297, + "day": 1, + "title": "International Collegiate Programming Contest, Asia Regional 2022, Japan", + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "problems": [ + { + "id": "1433", + "available": 3, + "doctype": 2, + "name": "Hasty Santa Claus", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 118, + "submissions": 223, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 55.15695067264574, + "score": 1.0847457627118644, + "userScore": 0 + }, + { + "id": "1434", + "available": 4, + "doctype": 2, + "name": "Interactive Number Guessing", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 90, + "submissions": 359, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.133704735376046, + "score": 1.4222222222222223, + "userScore": 0 + }, + { + "id": "1435", + "available": 1, + "doctype": 2, + "name": "Secure the Top Secret", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 5, + "submissions": 28, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.571428571428573, + "score": 16, + "userScore": 0 + }, + { + "id": "1436", + "available": 3, + "doctype": 2, + "name": "Move One Coin", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 44, + "submissions": 142, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 32.394366197183096, + "score": 2.909090909090909, + "userScore": 0 + }, + { + "id": "1437", + "available": 1, + "doctype": 2, + "name": "Incredibly Cute Penguin Chicks", + "problemTimeLimit": 6, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 36, + "submissions": 149, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.859060402684563, + "score": 3.5555555555555554, + "userScore": 0 + }, + { + "id": "1438", + "available": 1, + "doctype": 2, + "name": "Make a Loop", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 33, + "submissions": 70, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.42857142857143, + "score": 3.878787878787879, + "userScore": 0 + }, + { + "id": "1439", + "available": 1, + "doctype": 2, + "name": "Remodeling the Dungeon", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 68, + "submissions": 146, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 49.31506849315068, + "score": 1.8823529411764706, + "userScore": 0 + }, + { + "id": "1440", + "available": 1, + "doctype": 2, + "name": "Cake Decoration", + "problemTimeLimit": 8, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 15, + "submissions": 68, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 36.76470588235294, + "score": 8.533333333333333, + "userScore": 0 + }, + { + "id": "1441", + "available": 1, + "doctype": 2, + "name": "Quiz Contest", + "problemTimeLimit": 8, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 7, + "submissions": 22, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 50, + "score": 16, + "userScore": 0 + }, + { + "id": "1442", + "available": 3, + "doctype": 2, + "name": "Traveling Salesperson in an Island", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 8, + "submissions": 20, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 40, + "score": 16, + "userScore": 0 + }, + { + "id": "1443", + "available": 1, + "doctype": 2, + "name": "New Year Festival", + "problemTimeLimit": 7, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 4, + "submissions": 24, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 16.666666666666668, + "score": 16, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2023", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2023, + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "days": [ + { + "id": 313, + "day": 1, + "title": "International Collegiate Programming Contest, Asia Regional 2023, Japan", + "progress": 0, + "numberOfProblems": 11, + "numberOfSolved": 0, + "problems": [ + { + "id": "1444", + "available": 1, + "doctype": 2, + "name": "Yokohama Phenomena", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 151, + "submissions": 245, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 72.65306122448979, + "score": 0.847682119205298, + "userScore": 0 + }, + { + "id": "1445", + "available": 1, + "doctype": 2, + "name": "Rank Promotion", + "problemTimeLimit": 3, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 84, + "submissions": 242, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 38.84297520661157, + "score": 1.5238095238095237, + "userScore": 0 + }, + { + "id": "1446", + "available": 1, + "doctype": 2, + "name": "Ferris Wheel", + "problemTimeLimit": 6, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 11, + "submissions": 32, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 46.875, + "score": 11.636363636363637, + "userScore": 0 + }, + { + "id": "1447", + "available": 3, + "doctype": 2, + "name": "Nested Repetition Compression", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 69, + "submissions": 161, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.5527950310559, + "score": 1.855072463768116, + "userScore": 0 + }, + { + "id": "1448", + "available": 1, + "doctype": 2, + "name": "Chayas", + "problemTimeLimit": 8, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 60, + "submissions": 159, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 52.20125786163522, + "score": 2.1333333333333333, + "userScore": 0 + }, + { + "id": "1449", + "available": 1, + "doctype": 2, + "name": "Color Inversion on a Huge Chessboard", + "problemTimeLimit": 4, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 94, + "submissions": 161, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 65.21739130434783, + "score": 1.3617021276595744, + "userScore": 0 + }, + { + "id": "1450", + "available": 1, + "doctype": 2, + "name": "Fortune Telling", + "problemTimeLimit": 5, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 47, + "submissions": 119, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 49.57983193277311, + "score": 2.723404255319149, + "userScore": 0 + }, + { + "id": "1451", + "available": 1, + "doctype": 2, + "name": "Task Assignment to Two Employees", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 25, + "submissions": 96, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 35.416666666666664, + "score": 5.12, + "userScore": 0 + }, + { + "id": "1452", + "available": 1, + "doctype": 2, + "name": "Liquid Distribution", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 20, + "submissions": 58, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 34.48275862068966, + "score": 6.4, + "userScore": 0 + }, + { + "id": "1453", + "available": 1, + "doctype": 2, + "name": "Do It Yourself?", + "problemTimeLimit": 10, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 30, + "submissions": 118, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 35.59322033898305, + "score": 4.266666666666667, + "userScore": 0 + }, + { + "id": "1454", + "available": 4, + "doctype": 2, + "name": "Probing the Disk", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 38, + "submissions": 528, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 9.469696969696969, + "score": 3.3684210526315788, + "userScore": 0 + } + ] + } + ] + }, + { + "abbr": "ICPCRegional2024", + "largeCl": "ICPC", + "middleCl": "Regional", + "year": 2024, + "progress": 0, + "numberOfProblems": 12, + "numberOfSolved": 0, + "days": [ + { + "id": 325, + "day": 1, + "title": "International Collegiate Programming Contest, Asia Regional 2024, Japan", + "progress": 0, + "numberOfProblems": 12, + "numberOfSolved": 0, + "problems": [ + { + "id": "1455", + "available": 1, + "doctype": 2, + "name": "Ribbon on the Christmas Present", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 72, + "submissions": 174, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 44.827586206896555, + "score": 1.7777777777777777, + "userScore": 0 + }, + { + "id": "1456", + "available": 1, + "doctype": 2, + "name": "The Sparsest Number in Between", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 70, + "submissions": 172, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 45.93023255813954, + "score": 1.8285714285714285, + "userScore": 0 + }, + { + "id": "1457", + "available": 1, + "doctype": 2, + "name": "Omnes Viae Yokohamam Ducunt?", + "problemTimeLimit": 3, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 52, + "submissions": 116, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 47.41379310344828, + "score": 2.4615384615384617, + "userScore": 0 + }, + { + "id": "1458", + "available": 1, + "doctype": 2, + "name": "Tree Generators", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 27, + "submissions": 60, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 51.666666666666664, + "score": 4.7407407407407405, + "userScore": 0 + }, + { + "id": "1459", + "available": 1, + "doctype": 2, + "name": "E-Circuit Is Now on Sale!", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 55, + "submissions": 67, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 86.56716417910448, + "score": 2.327272727272727, + "userScore": 0 + }, + { + "id": "1460", + "available": 3, + "doctype": 2, + "name": "The Farthest Point", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 22, + "submissions": 135, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 19.25925925925926, + "score": 5.818181818181818, + "userScore": 0 + }, + { + "id": "1461", + "available": 4, + "doctype": 2, + "name": "Beyond the Former Explorer", + "problemTimeLimit": 4, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 11, + "submissions": 88, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 22.727272727272727, + "score": 11.636363636363637, + "userScore": 0 + }, + { + "id": "1462", + "available": 3, + "doctype": 2, + "name": "Remodeling the Dungeon 2", + "problemTimeLimit": 8, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 6, + "submissions": 19, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 42.10526315789474, + "score": 16, + "userScore": 0 + }, + { + "id": "1463", + "available": 1, + "doctype": 2, + "name": "Greatest of the Greatest Common Divisors", + "problemTimeLimit": 4, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 44, + "submissions": 92, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 61.95652173913044, + "score": 2.909090909090909, + "userScore": 0 + }, + { + "id": "1464", + "available": 1, + "doctype": 2, + "name": "Mixing Solutions", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 10, + "submissions": 44, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 34.09090909090909, + "score": 12.8, + "userScore": 0 + }, + { + "id": "1465", + "available": 1, + "doctype": 2, + "name": "Scheduling Two Meetings", + "problemTimeLimit": 1, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 42, + "submissions": 167, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 28.143712574850298, + "score": 3.0476190476190474, + "userScore": 0 + }, + { + "id": "1466", + "available": 1, + "doctype": 2, + "name": "Peculiar Protocol", + "problemTimeLimit": 2, + "problemMemoryLimit": 2097152, + "maxScore": 0, + "solvedUser": 19, + "submissions": 116, + "recommendations": 0, + "isSolved": false, + "bookmark": false, + "recommend": false, + "successRate": 16.379310344827587, + "score": 6.7368421052631575, + "userScore": 0 + } + ] + } + ] + } + ] +} diff --git a/src/lib/clients/fixtures/record_requests.ts b/src/lib/clients/fixtures/record_requests.ts index 878a89eb9..0bd7dfd3b 100644 --- a/src/lib/clients/fixtures/record_requests.ts +++ b/src/lib/clients/fixtures/record_requests.ts @@ -41,6 +41,8 @@ const challengeConfigs = [ { contestType: 'PCK', round: 'FINAL', dir: 'pck_final' }, { contestType: 'JAG', round: 'PRELIM', dir: 'jag_prelim' }, { contestType: 'JAG', round: 'REGIONAL', dir: 'jag_regional' }, + { contestType: 'ICPC', round: 'PRELIM', dir: 'icpc_prelim' }, + { contestType: 'ICPC', round: 'REGIONAL', dir: 'icpc_regional' }, ] as const; const TEST_DATA_BASE_DIR = path.join('src', 'lib', 'clients', 'fixtures'); @@ -83,7 +85,7 @@ async function saveAojCourseTasks(): Promise { } async function saveAojChallenge( - contestType: 'PCK' | 'JAG', + contestType: 'PCK' | 'JAG' | 'ICPC', round: 'PRELIM' | 'FINAL' | 'REGIONAL', dir: string, ): Promise { diff --git a/src/lib/clients/index.ts b/src/lib/clients/index.ts index d0facc76f..539e5bf09 100644 --- a/src/lib/clients/index.ts +++ b/src/lib/clients/index.ts @@ -21,7 +21,9 @@ export type ContestTaskImportSource = | 'aoj_pck_prelim' | 'aoj_pck_final' | 'aoj_jag_prelim' - | 'aoj_jag_regional'; + | 'aoj_jag_regional' + | 'aoj_icpc_prelim' + | 'aoj_icpc_regional'; type ContestTaskImportSourceConfig = { label: string; @@ -66,6 +68,14 @@ const importSources: Record { return ContestType.AOJ_PCK; } + if (/^ICPC(Prelim|Regional)\d*$/.exec(contest_id)) { + return ContestType.AOJ_ICPC; + } + if (/^JAG(Prelim|Regional|Summer|Winter|Spring)\d*$/.exec(contest_id)) { return ContestType.AOJ_JAG; } @@ -265,13 +269,13 @@ export function getContestPrefixes(contestPrefixes: Record) { } /** - * Contest type priorities (0 = Highest, 23 = Lowest) + * Contest type priorities (0 = Highest, 24 = Lowest) * * Priority assignment rationale: * - Educational contests (0-11, 17): ABS, ABC, APG4B and AWC etc. * - Contests for genius (12-16): ARC, AGC, and their variants * - Special contests (18-20): UNIVERSITY, FPS_24, OTHERS - * - External platforms (21-23): AOJ_COURSES, AOJ_PCK, AOJ_JAG + * - External platforms (21-24): AOJ_COURSES, AOJ_PCK, AOJ_ICPC, AOJ_JAG * * @remarks * HACK: The priorities for ARC, AGC, UNIVERSITY, AOJ_COURSES, and AOJ_PCK are temporary @@ -304,7 +308,8 @@ export const contestTypePriorities: Map = new Map([ [ContestType.OTHERS, 20], // AtCoder (その他) [ContestType.AOJ_COURSES, 21], [ContestType.AOJ_PCK, 22], - [ContestType.AOJ_JAG, 23], + [ContestType.AOJ_ICPC, 23], + [ContestType.AOJ_JAG, 24], ]); export function getContestPriority(contestId: string): number { @@ -447,6 +452,10 @@ export const getContestNameLabel = (contestId: string) => { return getAojContestLabel(PCK_TRANSLATIONS, contestId); } + if (contestId.startsWith('ICPC')) { + return getAojContestLabel(ICPC_TRANSLATIONS, contestId); + } + if (contestId.startsWith('JAG')) { return getAojContestLabel(JAG_TRANSLATIONS, contestId); } @@ -692,6 +701,11 @@ const JAG_TRANSLATIONS = { Regional: ' 模擬地区 ', }; +const ICPC_TRANSLATIONS = { + Prelim: ' 国内予選 ', + Regional: ' 地区予選 ', +}; + export function getAojContestLabel( translations: Readonly, contestId: string, @@ -717,6 +731,9 @@ export const addContestNameToTaskIndex = (contestId: string, taskTableIndex: str function isAojContest(contestId: string): boolean { return ( - aojCoursePrefixes.has(contestId) || contestId.startsWith('PCK') || contestId.startsWith('JAG') + aojCoursePrefixes.has(contestId) || + contestId.startsWith('PCK') || + contestId.startsWith('JAG') || + contestId.startsWith('ICPC') ); } diff --git a/src/lib/utils/task.ts b/src/lib/utils/task.ts index 678cd243e..3f384e5a4 100644 --- a/src/lib/utils/task.ts +++ b/src/lib/utils/task.ts @@ -36,7 +36,8 @@ class AojGenerator implements UrlGenerator { return ( getPrefixForAojCourses().includes(contestId) || contestId.startsWith('PCK') || - contestId.startsWith('JAG') + contestId.startsWith('JAG') || + contestId.startsWith('ICPC') ); } diff --git a/src/test/lib/utils/contest.test.ts b/src/test/lib/utils/contest.test.ts index d044131cf..505ea78a7 100644 --- a/src/test/lib/utils/contest.test.ts +++ b/src/test/lib/utils/contest.test.ts @@ -212,6 +212,14 @@ describe('Contest', () => { }); }); }); + + describe('when contest_id means AOJ ICPC (prelim and regional)', () => { + TestCasesForContestType.aojIcpc.forEach(({ name, value }) => { + runTests(`${name}`, [value], ({ contestId, expected }: TestCaseForContestType) => { + expect(classifyContest(contestId)).toEqual(expected); + }); + }); + }); }); }); @@ -410,6 +418,14 @@ describe('Contest', () => { }); }); }); + + describe('when contest_id means AOJ ICPC (prelim and regional)', () => { + TestCasesForContestType.aojIcpc.forEach(({ name, value }) => { + runTests(`${name}`, [value], ({ contestId, expected }: TestCaseForContestType) => { + expect(getContestPriority(contestId)).toEqual(contestTypePriorities.get(expected)); + }); + }); + }); }); }); @@ -479,6 +495,16 @@ describe('Contest', () => { }); }); }); + + describe('AOJ', () => { + describe('when contest_id means AOJ ICPC (prelim and regional)', () => { + TestCasesForContestNameLabel.aojIcpc.forEach(({ name, value }) => { + runTests(`${name}`, [value], ({ contestId, expected }: TestCaseForContestNameLabel) => { + expect(getContestNameLabel(contestId)).toEqual(expected); + }); + }); + }); + }); }); describe('add contest name to task index', () => { @@ -652,6 +678,18 @@ describe('Contest', () => { ); }); }); + + describe('when contest_id means AOJ ICPC (prelim and regional)', () => { + TestCasesForContestNameAndTaskIndex.aojIcpc.forEach(({ name, value }) => { + runTests( + `${name}`, + [value], + ({ contestId, taskTableIndex, expected }: TestCaseForContestNameAndTaskIndex) => { + expect(addContestNameToTaskIndex(contestId, taskTableIndex)).toEqual(expected); + }, + ); + }); + }); }); }); diff --git a/src/test/lib/utils/task.test.ts b/src/test/lib/utils/task.test.ts index e41680037..ee6984523 100644 --- a/src/test/lib/utils/task.test.ts +++ b/src/test/lib/utils/task.test.ts @@ -99,6 +99,14 @@ describe('Task', () => { }); }); }); + + describe('when contest ids and task ids for AOJ ICPC (Prelim and Regional) are given', () => { + TestCasesForTaskUrl.aojIcpc.forEach(({ name, value }) => { + runTests(`${name}`, [value], ({ contestId, taskId, expected }: TestCaseForTaskUrl) => { + expect(getTaskUrl(contestId, taskId)).toBe(expected); + }); + }); + }); }); describe('count accepted tasks', () => { diff --git a/src/test/lib/utils/test_cases/contest_name_and_task_index.ts b/src/test/lib/utils/test_cases/contest_name_and_task_index.ts index ef9e64046..3cceb6348 100644 --- a/src/test/lib/utils/test_cases/contest_name_and_task_index.ts +++ b/src/test/lib/utils/test_cases/contest_name_and_task_index.ts @@ -817,3 +817,49 @@ const generateAojJagTestCases = (contestIds: JagContestIds, taskIndices: string[ export const aojJag = Object.entries(AOJ_JAG_TEST_DATA).flatMap(([contestId, tasks]) => generateAojJagTestCases(Array(tasks.tasks.length).fill(contestId), tasks.tasks), ); + +/** + * Test cases for AOJ ICPC contests + * Includes both preliminary (国内予選) and regional (地区予選) rounds + * Format: ICPC{Round}{Year} - {problemId} + */ +const AOJ_ICPC_TEST_DATA = { + Prelim2023: { + contestId: 'Prelim2023', + tasks: ['1664', '1665'], + }, + Prelim2024: { + contestId: 'Prelim2024', + tasks: ['1672', '1673'], + }, + Regional2023: { + contestId: 'Regional2023', + tasks: ['1444', '1445'], + }, + Regional2024: { + contestId: 'Regional2024', + tasks: ['1455', '1456'], + }, +}; + +type IcpcRound = 'Prelim' | 'Regional'; +type IcpcYear = '2023' | '2024'; +type IcpcContestId = `${IcpcRound}${IcpcYear}`; +type IcpcContestIds = IcpcContestId[]; + +const generateAojIcpcTestCases = ( + contestIds: IcpcContestIds, + taskIndices: string[], +): { name: string; value: TestCaseForContestNameAndTaskIndex }[] => { + return zip(contestIds, taskIndices).map(([contestId, taskIndex]) => { + return createTestCaseForContestNameAndTaskIndex(`AOJ, ICPC${contestId} - ${taskIndex}`)({ + contestId: `ICPC${contestId}`, + taskTableIndex: taskIndex, + expected: `AOJ ${taskIndex}(ICPC${contestId.replace('Prelim', ' 国内予選 ').replace('Regional', ' 地区予選 ')})`, + }); + }); +}; + +export const aojIcpc = Object.entries(AOJ_ICPC_TEST_DATA).flatMap(([contestId, tasks]) => + generateAojIcpcTestCases(Array(tasks.tasks.length).fill(contestId), tasks.tasks), +); diff --git a/src/test/lib/utils/test_cases/contest_name_labels.ts b/src/test/lib/utils/test_cases/contest_name_labels.ts index a181d7e7c..53b456637 100644 --- a/src/test/lib/utils/test_cases/contest_name_labels.ts +++ b/src/test/lib/utils/test_cases/contest_name_labels.ts @@ -86,3 +86,22 @@ export const fps24 = [ expected: 'FPS 24 題', }), ]; + +export const aojIcpc = [ + createTestCaseForContestNameLabel('ICPC Prelim 2024')({ + contestId: 'ICPCPrelim2024', + expected: '(ICPC 国内予選 2024)', + }), + createTestCaseForContestNameLabel('ICPC Regional 2024')({ + contestId: 'ICPCRegional2024', + expected: '(ICPC 地区予選 2024)', + }), + createTestCaseForContestNameLabel('ICPC Prelim 2023')({ + contestId: 'ICPCPrelim2023', + expected: '(ICPC 国内予選 2023)', + }), + createTestCaseForContestNameLabel('ICPC Regional 2023')({ + contestId: 'ICPCRegional2023', + expected: '(ICPC 地区予選 2023)', + }), +]; diff --git a/src/test/lib/utils/test_cases/contest_type.ts b/src/test/lib/utils/test_cases/contest_type.ts index c864ae7b4..f8ff5b779 100644 --- a/src/test/lib/utils/test_cases/contest_type.ts +++ b/src/test/lib/utils/test_cases/contest_type.ts @@ -639,3 +639,17 @@ export const aojJag = aojJagContestData.map(({ name, contestId }) => expected: ContestType.AOJ_JAG, }), ); + +const aojIcpcContestData = [ + { name: 'AOJ, ICPC Prelim 2023', contestId: 'ICPCPrelim2023' }, + { name: 'AOJ, ICPC Prelim 2024', contestId: 'ICPCPrelim2024' }, + { name: 'AOJ, ICPC Regional 2023', contestId: 'ICPCRegional2023' }, + { name: 'AOJ, ICPC Regional 2024', contestId: 'ICPCRegional2024' }, +]; + +export const aojIcpc = aojIcpcContestData.map(({ name, contestId }) => + createTestCaseForContestType(name)({ + contestId, + expected: ContestType.AOJ_ICPC, + }), +); diff --git a/src/test/lib/utils/test_cases/task_url.ts b/src/test/lib/utils/test_cases/task_url.ts index 2cf596094..49f518d51 100644 --- a/src/test/lib/utils/test_cases/task_url.ts +++ b/src/test/lib/utils/test_cases/task_url.ts @@ -176,3 +176,22 @@ export const aojJag = jagContests.flatMap((jag) => }); }), ); + +// ICPC contests follow these patterns: +// - Contest ID format: ICPC(Prelim|Regional) +const icpcContests = [ + { contestId: 'ICPCPrelim2023', tasks: ['1664', '1665'] }, + { contestId: 'ICPCPrelim2024', tasks: ['1672', '1673'] }, + { contestId: 'ICPCRegional2023', tasks: ['1444', '1445'] }, + { contestId: 'ICPCRegional2024', tasks: ['1455', '1456'] }, +]; + +export const aojIcpc = icpcContests.flatMap((icpc) => + icpc.tasks.map((task) => { + return createTestCaseForTaskUrl(`AOJ ICPC, ${icpc.contestId} ${task}`)({ + contestId: icpc.contestId, + taskId: task, + expected: `${AOJ_TASKS_URL}/${task}`, + }); + }), +); From 42a98fdb97b26543dfff3e0ba00d855a77704a36 Mon Sep 17 00:00:00 2001 From: "k.hiro1818" Date: Wed, 20 May 2026 09:07:55 +0000 Subject: [PATCH 2/4] docs: update plan.md with CodeRabbit findings and add ICPC REGIONAL test - Fix contestId format in plan.md examples (ICPCPrelim/ICPCRegional prefix) - Add CodeRabbit Findings section with two rounds of review notes - Add ICPC REGIONAL test case in clients.test.ts - Add comment clarifying ICPC round constraints in record_requests.ts Co-Authored-By: Claude Sonnet 4.6 --- .../2026-05-20/aoj-icpc-import/plan.md | 34 ++++++++++++++++--- .../clients/aizu_online_judge/clients.test.ts | 9 +++++ src/lib/clients/fixtures/record_requests.ts | 1 + 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md b/docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md index 171c87354..15aff438c 100644 --- a/docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md +++ b/docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md @@ -128,10 +128,10 @@ export const aojIcpc = aojIcpcContestData.map(({ name, contestId }) => ```typescript const AOJ_ICPC_TEST_DATA = { - Prelim2023: { contestId: 'Prelim2023', tasks: ['実ID1', '実ID2'] }, - Prelim2024: { contestId: 'Prelim2024', tasks: ['実ID1', '実ID2'] }, - Regional2023: { contestId: 'Regional2023', tasks: ['実ID1', '実ID2'] }, - Regional2024: { contestId: 'Regional2024', tasks: ['実ID1', '実ID2'] }, + Prelim2023: { contestId: 'ICPCPrelim2023', tasks: ['実ID1', '実ID2'] }, + Prelim2024: { contestId: 'ICPCPrelim2024', tasks: ['実ID1', '実ID2'] }, + Regional2023: { contestId: 'ICPCRegional2023', tasks: ['実ID1', '実ID2'] }, + Regional2024: { contestId: 'ICPCRegional2024', tasks: ['実ID1', '実ID2'] }, }; ``` @@ -331,3 +331,29 @@ pnpm test:unit src/test/lib/utils/task.test.ts # 172 tests passed - `ContestTableProvider` 実装(how-to-add-contest-table-provider.md 参照) - `contestTypePriorities` の優先度は暫定値(次 PR で ContestTableProvider 登録後に再確認) + +--- + +## CodeRabbit Findings + +### 1回目レビュー + +#### potential_issue: テストデータの contestId フォーマット(plan.md 記載のコード例) + +- **ファイル**: `docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md` 131–135 行 +- **内容**: plan.md のコード例では `contestId: 'Prelim2023'` と ICPC プレフィックスなしで記載しているが、実際のソースコード(`contest_name_and_task_index.ts`)では `generateAojIcpcTestCases` 内で `ICPC${contestId}` とプレフィックスを付与しているため動作上は正しい。plan.md の説明が誤解を招く形になっているドキュメント上の問題。 +- **判断**: plan.md はリファレンスドキュメントであり、実装コードは正しく動作している。修正優先度: 低(次 PR 前に plan.md を更新するか削除すれば解消) + +### 2回目レビュー + +#### potential_issue: `saveAojChallenge` の型安全性(plan.md 記載のコード例) + +- **ファイル**: `docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md` 57–63 行 +- **内容**: plan.md に記載された `saveAojChallenge` シグネチャが `contestType: 'PCK' | 'JAG' | 'ICPC'` / `round: 'PRELIM' | 'FINAL' | 'REGIONAL'` と独立 union になっており、`{contestType: 'ICPC', round: 'FINAL'}` のような不正な組み合わせを型で防げない形で文書化されている。実装コード(`record_requests.ts`)の実際のシグネチャも同様。 +- **判断**: 実装コード上の型安全性の問題。`ChallengeRoundMap[T]` を使ったジェネリクス or オーバーロードにすれば解決できるが、次 PR の `ContestTableProvider` 実装時に合わせて検討するのが適切。 + +#### potential_issue × 2: 2026-04-26 の survey.md(SvelteKit Remote Functions / AWS Lambda) + +- **ファイル**: `docs/dev-notes/2026-04-26/sveltekit-streaming-vs-remote-functions/survey.md` +- **内容**: 今回の PR (#3562) のスコープ外のドキュメント。AWS Lambda / Firebase のストリーミング対応状況が古くなっているという指摘だが、このファイルは AOJ_ICPC 機能とは無関係。 +- **判断**: 本 PR では対応不要 diff --git a/src/lib/clients/aizu_online_judge/clients.test.ts b/src/lib/clients/aizu_online_judge/clients.test.ts index 51f75367f..ed66b1228 100644 --- a/src/lib/clients/aizu_online_judge/clients.test.ts +++ b/src/lib/clients/aizu_online_judge/clients.test.ts @@ -304,5 +304,14 @@ describe('AojChallengesApiClient', () => { .flatMap((day) => day.problems).length; expect(tasks.length).toBe(expectedCount); }); + + test('each ICPC REGIONAL task has required fields', async () => { + const tasks = await client.getTasks({ contestType: 'ICPC', round: 'REGIONAL' }); + tasks.forEach((task) => { + expect(task.id).toBeDefined(); + expect(task.contest_id).toBeDefined(); + expect(task.title).toBeDefined(); + }); + }); }); }); diff --git a/src/lib/clients/fixtures/record_requests.ts b/src/lib/clients/fixtures/record_requests.ts index 0bd7dfd3b..25195b053 100644 --- a/src/lib/clients/fixtures/record_requests.ts +++ b/src/lib/clients/fixtures/record_requests.ts @@ -84,6 +84,7 @@ async function saveAojCourseTasks(): Promise { ); } +// ICPC uses only 'PRELIM' and 'REGIONAL'; 'FINAL' is for PCK only. async function saveAojChallenge( contestType: 'PCK' | 'JAG' | 'ICPC', round: 'PRELIM' | 'FINAL' | 'REGIONAL', From a527e803acf1cfa8993af70451082489fe807e08 Mon Sep 17 00:00:00 2001 From: "k.hiro1818" Date: Wed, 20 May 2026 09:08:30 +0000 Subject: [PATCH 3/4] docs: remove completed aoj-icpc-import plan Co-Authored-By: Claude Sonnet 4.6 --- .../2026-05-20/aoj-icpc-import/plan.md | 359 ------------------ 1 file changed, 359 deletions(-) delete mode 100644 docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md diff --git a/docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md b/docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md deleted file mode 100644 index 15aff438c..000000000 --- a/docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md +++ /dev/null @@ -1,359 +0,0 @@ -# AOJ ICPC インポート対応 - -## 概要 - -AOJ(Aizu Online Judge)の ICPC 国内予選・地区予選の問題をインポートできるようにする。 - -対象 URL: - -- https://onlinejudge.u-aizu.ac.jp/challenges/sources/ICPC/Prelim -- https://onlinejudge.u-aizu.ac.jp/challenges/sources/ICPC/Regional - -API エンドポイント: `/challenges/cl/ICPC/PRELIM` / `/challenges/cl/ICPC/REGIONAL` - -contest_id (abbr) フォーマット: `ICPCPrelim{YYYY}` / `ICPCRegional{YYYY}`(確認済み) - -## 設計方針 - -既存の `AojChallengesApiClient` を拡張する。PCK・JAG と全く同じアーキテクチャで動作するため、 -`ChallengeContestType` に `'ICPC'` を追加し、`IcpcRound = 'PRELIM' | 'REGIONAL'` を定義するだけで -クライアント実装は不要。 - -## 却下した代替案 - -- **専用 ApiClient クラス**: PCK/JAG と同じ API 構造なので不要。YAGNI。 -- **AOJ_JAG との統合**: JAG (Japan Alumni Group) と ICPC は主催が異なるため分離が正しい。 - -## スコープ(本 PR) - -ContestTableProvider は次 PR。本 PR は以下のみ: - -1. Prisma enum 追加 + migration -2. API client 型拡張 -3. `classifyContest()` 更新 -4. 管理画面 import source 追加 - -## フェーズ概要 - -| フェーズ | 内容 | リスク | -| -------- | ------------------------------------------------------------------------- | --------------- | -| Phase 1 | テストを書く(TDD: フィクスチャ・テストケース追加) | 低 | -| Phase 2 | Prisma schema 変更 + migration + `types/contest.ts` 更新 | 中(migration) | -| Phase 3 | API Client 型拡張(`types.ts` / `index.ts`) | 低 | -| Phase 4 | `contest.ts` 更新(classifyContest / priorities / labels / isAojContest) | 低 | - ---- - -## Phase 1: テストを書く(TDD) - -### タスク 1-1: テスト用フィクスチャ作成(`record_requests.ts` 経由) - -フィクスチャ JSON は手書きせず、実 API を叩いて自動生成する。 - -**`src/lib/clients/fixtures/record_requests.ts` を変更**: - -1. `saveAojChallenge` の引数型を拡張: - - ```typescript - async function saveAojChallenge( - contestType: 'PCK' | 'JAG' | 'ICPC', - round: 'PRELIM' | 'FINAL' | 'REGIONAL', - dir: string, - ): Promise; - ``` - -2. `challengeConfigs` に ICPC を追加: - - ```typescript - const challengeConfigs = [ - { contestType: 'PCK', round: 'PRELIM', dir: 'pck_prelim' }, - { contestType: 'PCK', round: 'FINAL', dir: 'pck_final' }, - { contestType: 'JAG', round: 'PRELIM', dir: 'jag_prelim' }, - { contestType: 'JAG', round: 'REGIONAL', dir: 'jag_regional' }, - { contestType: 'ICPC', round: 'PRELIM', dir: 'icpc_prelim' }, - { contestType: 'ICPC', round: 'REGIONAL', dir: 'icpc_regional' }, - ] as const; - ``` - -**スクリプト実行**: - -```bash -pnpm dlx vite-node ./src/lib/clients/fixtures/record_requests.ts -``` - -→ `src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_prelim/contests.json` と -`icpc_regional/contests.json` が自動生成される。 - -### タスク 1-2: `clients.test.ts` に ICPC テスト追加 - -`FIXTURE_PATHS` に追加: - -```typescript -icpcPrelim: { - contests: './src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_prelim/contests.json', -}, -icpcRegional: { - contests: './src/lib/clients/fixtures/aizu_online_judge/challenges/icpc_regional/contests.json', -}, -``` - -nock 対象: - -- `/challenges/cl/ICPC/PRELIM` -- `/challenges/cl/ICPC/REGIONAL` - -PCK/JAG と同パターンで `describe('ICPC PRELIM')` / `describe('ICPC REGIONAL')` を追加。 - -### タスク 1-3: `contest_type.ts` に `aojIcpc` 追加 - -```typescript -const aojIcpcContestData = [ - { name: 'AOJ, ICPC Prelim 2023', contestId: 'ICPCPrelim2023' }, - { name: 'AOJ, ICPC Prelim 2024', contestId: 'ICPCPrelim2024' }, - { name: 'AOJ, ICPC Regional 2023', contestId: 'ICPCRegional2023' }, - { name: 'AOJ, ICPC Regional 2024', contestId: 'ICPCRegional2024' }, -]; - -export const aojIcpc = aojIcpcContestData.map(({ name, contestId }) => - createTestCaseForContestType(name)({ - contestId, - expected: ContestType.AOJ_ICPC, - }), -); -``` - -### タスク 1-4: `contest_name_and_task_index.ts` に ICPC テストデータ追加 - -フィクスチャ生成後に実際の問題 ID を確認して設定する。 - -```typescript -const AOJ_ICPC_TEST_DATA = { - Prelim2023: { contestId: 'ICPCPrelim2023', tasks: ['実ID1', '実ID2'] }, - Prelim2024: { contestId: 'ICPCPrelim2024', tasks: ['実ID1', '実ID2'] }, - Regional2023: { contestId: 'ICPCRegional2023', tasks: ['実ID1', '実ID2'] }, - Regional2024: { contestId: 'ICPCRegional2024', tasks: ['実ID1', '実ID2'] }, -}; -``` - -期待値例: - -- `ICPCPrelim2024` + task `XXXX` → `"AOJ XXXX(ICPC 国内予選 2024)"` -- `ICPCRegional2024` + task `XXXX` → `"AOJ XXXX(ICPC 地区予選 2024)"` - -### タスク 1-5: `contest.test.ts` に ICPC テストブロック追加 - -JAG の直後に以下 4 箇所追加: - -1. `classifyContest` → `when contest_id means AOJ ICPC (prelim and regional)` -2. `get contest priority` → `when contest_id means AOJ ICPC (prelim and regional)` -3. `get contest name label` → ICPC 個別テスト -4. `addContestNameToTaskIndex` → AOJ セクションに ICPC 追加 - ---- - -## Phase 2: Prisma Schema + Types - -### タスク 2-1: `prisma/schema.prisma` 変更 - -`AOJ_ICPC` を `AOJ_PCK` の直後、`AOJ_JAG` の直前に追加: - -```prisma -AOJ_PCK // All-Japan High School Programming Contest (PCK) -AOJ_ICPC // ICPC (International Collegiate Programming Contest) -AOJ_JAG // ACM-ICPC Japan Alumni Group Contest (JAG) -``` - -### タスク 2-2: Migration 実行 - -```bash -pnpm exec prisma migrate dev --name add_aoj_icpc_to_contest_type -``` - -### タスク 2-3: `src/lib/types/contest.ts` 更新 - -`ContestType` const に追加(`AOJ_PCK` と `AOJ_JAG` の間): - -```typescript -AOJ_PCK: 'AOJ_PCK', -AOJ_ICPC: 'AOJ_ICPC', // ICPC (International Collegiate Programming Contest) -AOJ_JAG: 'AOJ_JAG', -``` - ---- - -## Phase 3: API Client 拡張 - -### タスク 3-1: `src/lib/clients/aizu_online_judge/types.ts` - -```typescript -export type ChallengeContestType = 'PCK' | 'JAG' | 'ICPC'; - -export type IcpcRound = 'PRELIM' | 'REGIONAL'; - -export type ChallengeRoundMap = { - PCK: PckRound; - JAG: JagRound; - ICPC: IcpcRound; -}; -``` - -### タスク 3-2: `src/lib/clients/index.ts` - -`ContestTaskImportSource` に追加: - -```typescript -| 'aoj_icpc_prelim' -| 'aoj_icpc_regional' -``` - -`importSources` に追加: - -```typescript -aoj_icpc_prelim: buildAojChallengeConfig( - { contestType: 'ICPC', round: 'PRELIM' }, - 'AOJ - ICPC 国内予選', -), -aoj_icpc_regional: buildAojChallengeConfig( - { contestType: 'ICPC', round: 'REGIONAL' }, - 'AOJ - ICPC 地区予選', -), -``` - ---- - -## Phase 4: `contest.ts` 更新 - -### タスク 4-1: `classifyContest()` に ICPC 追加 - -JAG の `if` の直前に追加: - -```typescript -if (/^ICPC(Prelim|Regional)\d*$/.exec(contest_id)) { - return ContestType.AOJ_ICPC; -} -``` - -### タスク 4-2: `contestTypePriorities` 更新 - -```typescript -[ContestType.AOJ_COURSES, 21], -[ContestType.AOJ_PCK, 22], -[ContestType.AOJ_ICPC, 23], // 追加 -[ContestType.AOJ_JAG, 24], // 23 → 24 -``` - -JSDoc カテゴリ名(`External platforms`)は変更しない。括弧内の数値範囲のみ `(21–24)` に更新。 - -### タスク 4-3: `ICPC_TRANSLATIONS` 追加(`JAG_TRANSLATIONS` 直後) - -```typescript -const ICPC_TRANSLATIONS = { - Prelim: ' 国内予選 ', - Regional: ' 地区予選 ', -}; -``` - -結果例(`getAojContestLabel` による文字列置換): - -- `ICPCPrelim2024` → `(ICPC 国内予選 2024)` -- `ICPCRegional2024` → `(ICPC 地区予選 2024)` - -### タスク 4-4: `getContestNameLabel()` に ICPC 分岐追加(JAG 直後) - -```typescript -if (contestId.startsWith('ICPC')) { - return getAojContestLabel(ICPC_TRANSLATIONS, contestId); -} -``` - -### タスク 4-5: `isAojContest()` に ICPC 追加 - -```typescript -function isAojContest(contestId: string): boolean { - return ( - aojCoursePrefixes.has(contestId) || - contestId.startsWith('PCK') || - contestId.startsWith('JAG') || - contestId.startsWith('ICPC') - ); -} -``` - ---- - -## 検証 - -```bash -pnpm exec prisma generate # Prisma client 再生成 -pnpm test:unit src/lib/clients/ # API client テスト -pnpm test:unit src/test/lib/utils/contest.test.ts # contest.ts テスト -pnpm check # 型チェック -pnpm lint # lint -``` - -管理画面 (`/tasks`) に「AOJ - ICPC 国内予選」「AOJ - ICPC 地区予選」が表示されることを目視確認。 - ---- - -## 追加変更: `AojGenerator.canHandle()` に ICPC 追加 - -### 概要 - -`src/lib/utils/task.ts` の `AojGenerator.canHandle()` に `contestId.startsWith('ICPC')` を追加した。 -これにより、ICPC コンテストの問題 URL が AtCoder URL ではなく AOJ URL(`AOJ_TASKS_URL/{taskId}`)で生成される。 - -### 変更ファイル - -- `src/lib/utils/task.ts` — `AojGenerator.canHandle()` に ICPC 条件追加 -- `src/test/lib/utils/test_cases/task_url.ts` — `icpcContests` / `aojIcpc` エクスポート追加 -- `src/test/lib/utils/task.test.ts` — AOJ ICPC describe ブロック追加 - -### テストデータ(実 task ID) - -```typescript -const icpcContests = [ - { contestId: 'ICPCPrelim2023', tasks: ['1664', '1665'] }, - { contestId: 'ICPCPrelim2024', tasks: ['1672', '1673'] }, - { contestId: 'ICPCRegional2023', tasks: ['1444', '1445'] }, - { contestId: 'ICPCRegional2024', tasks: ['1455', '1456'] }, -]; -``` - -### 検証 - -```bash -pnpm test:unit src/test/lib/utils/task.test.ts # 172 tests passed -``` - ---- - -## 残タスク(次 PR) - -- `ContestTableProvider` 実装(how-to-add-contest-table-provider.md 参照) -- `contestTypePriorities` の優先度は暫定値(次 PR で ContestTableProvider 登録後に再確認) - ---- - -## CodeRabbit Findings - -### 1回目レビュー - -#### potential_issue: テストデータの contestId フォーマット(plan.md 記載のコード例) - -- **ファイル**: `docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md` 131–135 行 -- **内容**: plan.md のコード例では `contestId: 'Prelim2023'` と ICPC プレフィックスなしで記載しているが、実際のソースコード(`contest_name_and_task_index.ts`)では `generateAojIcpcTestCases` 内で `ICPC${contestId}` とプレフィックスを付与しているため動作上は正しい。plan.md の説明が誤解を招く形になっているドキュメント上の問題。 -- **判断**: plan.md はリファレンスドキュメントであり、実装コードは正しく動作している。修正優先度: 低(次 PR 前に plan.md を更新するか削除すれば解消) - -### 2回目レビュー - -#### potential_issue: `saveAojChallenge` の型安全性(plan.md 記載のコード例) - -- **ファイル**: `docs/dev-notes/2026-05-20/aoj-icpc-import/plan.md` 57–63 行 -- **内容**: plan.md に記載された `saveAojChallenge` シグネチャが `contestType: 'PCK' | 'JAG' | 'ICPC'` / `round: 'PRELIM' | 'FINAL' | 'REGIONAL'` と独立 union になっており、`{contestType: 'ICPC', round: 'FINAL'}` のような不正な組み合わせを型で防げない形で文書化されている。実装コード(`record_requests.ts`)の実際のシグネチャも同様。 -- **判断**: 実装コード上の型安全性の問題。`ChallengeRoundMap[T]` を使ったジェネリクス or オーバーロードにすれば解決できるが、次 PR の `ContestTableProvider` 実装時に合わせて検討するのが適切。 - -#### potential_issue × 2: 2026-04-26 の survey.md(SvelteKit Remote Functions / AWS Lambda) - -- **ファイル**: `docs/dev-notes/2026-04-26/sveltekit-streaming-vs-remote-functions/survey.md` -- **内容**: 今回の PR (#3562) のスコープ外のドキュメント。AWS Lambda / Firebase のストリーミング対応状況が古くなっているという指摘だが、このファイルは AOJ_ICPC 機能とは無関係。 -- **判断**: 本 PR では対応不要 From 9e5272a962917a0be29706b47ff057e2b0d0edaa Mon Sep 17 00:00:00 2001 From: "k.hiro1818" Date: Wed, 20 May 2026 09:28:23 +0000 Subject: [PATCH 4/4] refactor: simplify ChallengeParams to discriminated union and remove ChallengeContestType/ChallengeRoundMap Co-Authored-By: Claude Sonnet 4.6 --- src/lib/clients/aizu_online_judge/clients.ts | 11 +++------ src/lib/clients/aizu_online_judge/types.ts | 26 ++++---------------- 2 files changed, 8 insertions(+), 29 deletions(-) diff --git a/src/lib/clients/aizu_online_judge/clients.ts b/src/lib/clients/aizu_online_judge/clients.ts index 2c1bbea45..33fbc44e9 100644 --- a/src/lib/clients/aizu_online_judge/clients.ts +++ b/src/lib/clients/aizu_online_judge/clients.ts @@ -13,8 +13,6 @@ import type { AOJChallengeContestAPI, ChallengeContest, ChallengeParams, - ChallengeContestType, - ChallengeRoundMap, } from './types'; import { buildEndpoint, mapToContest, mapToTask, getCourseName } from './utils'; @@ -67,7 +65,7 @@ export class AojChallengesApiClient { const { contestType, round } = params; return getCachedOrFetchContests(this.httpClient, this.cache, { - cacheKey: this.getCacheKey(contestType, round), + cacheKey: this.getCacheKey(params), endpoint: buildEndpoint(['challenges', 'cl', contestType, round]), errorMessage: `Failed to fetch ${contestType} ${round} contests from AOJ API`, validateResponse: (data) => @@ -86,7 +84,7 @@ export class AojChallengesApiClient { const { contestType, round } = params; return getCachedOrFetchTasks(this.httpClient, this.cache, { - cacheKey: this.getCacheKey(contestType, round), + cacheKey: this.getCacheKey(params), endpoint: buildEndpoint(['challenges', 'cl', contestType, round]), errorMessage: `Failed to fetch ${contestType} ${round} tasks from AOJ API`, validateResponse: (data) => @@ -101,10 +99,7 @@ export class AojChallengesApiClient { }); } - private getCacheKey( - contestType: ChallengeContestType, - round: ChallengeRoundMap[ChallengeContestType], - ): string { + private getCacheKey({ contestType, round }: ChallengeParams): string { return `aoj_${contestType.toLowerCase()}_${round.toLowerCase()}`; } } diff --git a/src/lib/clients/aizu_online_judge/types.ts b/src/lib/clients/aizu_online_judge/types.ts index d6ad433d1..b2a1bb8f6 100644 --- a/src/lib/clients/aizu_online_judge/types.ts +++ b/src/lib/clients/aizu_online_judge/types.ts @@ -17,27 +17,11 @@ export type Course = { export type Courses = Course[]; -/** - * Parameters for configuring a challenge contest in the AOJ. - * @property {ChallengeContestType} contestType - The type of contest for the challenge. - * @property {ChallengeRoundMap[ChallengeContestType]} round - The round of the contest. - */ -export type ChallengeParams = { - contestType: ChallengeContestType; - round: ChallengeRoundMap[ChallengeContestType]; -}; - -/** Represents the types of challenge contests available. */ -export type ChallengeContestType = 'PCK' | 'JAG' | 'ICPC'; - -/** - * A map that associates each type of challenge contest with its corresponding round type. - */ -export type ChallengeRoundMap = { - PCK: PckRound; - JAG: JagRound; - ICPC: IcpcRound; -}; +/** Discriminated union enforcing valid (contestType, round) pairs for AOJ challenge contests. */ +export type ChallengeParams = + | { contestType: 'PCK'; round: PckRound } + | { contestType: 'JAG'; round: JagRound } + | { contestType: 'ICPC'; round: IcpcRound }; /** Represents PCK contest rounds */ export type PckRound = 'PRELIM' | 'FINAL';