Skip to content
This repository was archived by the owner on Jan 23, 2025. It is now read-only.

Commit 6b23ab5

Browse files
committed
Merge pull request #365 from Ghost141/practice_problems_api
Update for srm practice problems api
2 parents d7483dd + acdbbfd commit 6b23ab5

17 files changed

+533
-161
lines changed

apiary.apib

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6461,6 +6461,10 @@ Request
64616461
{
64626462
"problemId": 10194,
64636463
"problemName": "DoubleLetter",
6464+
"component_id": 30305,
6465+
"room_id": 28,
6466+
"round_id": 9873,
6467+
"division_id": 2,
64646468
"problemType": "Single",
64656469
"points": 500,
64666470
"difficulty": "Medium",
@@ -6470,6 +6474,10 @@ Request
64706474
{
64716475
"problemId": 10195,
64726476
"problemName": "BlackAndWhite",
6477+
"component_id": 30309,
6478+
"room_id": 30,
6479+
"round_id": 9877,
6480+
"division_id": 2,
64736481
"problemType": "Team",
64746482
"points": 800,
64756483
"difficulty": "Hard",

queries/get_practice_problems

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,77 +5,71 @@ FIRST @pageSize@
55
FROM table(MULTISET(
66
SELECT
77
p.problem_id
8+
, c.component_id
9+
, ro.room_id
10+
, rc.round_id
11+
, rc.division_id
812
, p.name AS problem_name
913
, ptl.problem_type_desc AS problem_type
1014
, CASE WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 1) THEN 'Easy'::nvarchar(50)
1115
WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 2) THEN 'Medium'::nvarchar(50)
1216
WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 3) THEN 'Hard'::nvarchar(50)
1317
END AS difficulty
14-
, (
15-
SELECT DISTINCT rc.points
16-
FROM round_component rc
17-
INNER JOIN component c ON c.component_id = rc.component_id AND c.problem_id = p.problem_id
18-
INNER JOIN round_segment rs ON rs.round_id = rc.round_id AND rs.segment_id = 1
19-
WHERE rs.start_time = (SELECT MAX(rss.start_time) FROM round_component rc
20-
INNER JOIN component c ON c.component_id = rc.component_id AND c.problem_id = p.problem_id
21-
INNER JOIN round_segment rss ON rss.round_id = rc.round_id AND rss.segment_id = 1)
22-
)AS points
18+
, rc.points
2319
, CASE WHEN EXISTS (
2420
SELECT 1
2521
FROM component_state cs
26-
INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
2722
WHERE cs.status_id < 120
23+
AND cs.component_id = c.component_id
2824
AND cs.coder_id = @userId@
2925
UNION ALL
3026
SELECT 1
3127
FROM practice_component_state pcs
32-
INNER JOIN component c ON c.component_id = pcs.component_id AND c.problem_id = p.problem_id
3328
WHERE pcs.status_id < 120
29+
AND pcs.component_id = c.component_id
3430
AND pcs.coder_id = @userId@
3531
) THEN 'New'::nvarchar(50)
3632
WHEN EXISTS (
3733
SELECT 1
3834
FROM component_state cs
39-
INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
4035
WHERE cs.status_id = 150
36+
AND cs.component_id = c.component_id
4137
AND cs.coder_id = @userId@
4238
UNION ALL
4339
SELECT 1
4440
FROM practice_component_state pcs
45-
INNER JOIN component c ON c.component_id = pcs.component_id AND c.problem_id = p.problem_id
4641
WHERE pcs.status_id = 150
42+
AND pcs.component_id = c.component_id
4743
AND pcs.coder_id = @userId@
4844
) THEN 'Solved'::nvarchar(50)
4945
WHEN EXISTS (
5046
SELECT 1
5147
FROM component_state cs
52-
INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
5348
WHERE cs.status_id >= 120
49+
AND cs.component_id = c.component_id
5450
AND cs.status_id != 150
5551
AND cs.coder_id = @userId@
5652
UNION ALL
5753
SELECT 1
5854
FROM practice_component_state pcs
59-
INNER JOIN component c ON c.component_id = pcs.component_id AND c.problem_id = p.problem_id
6055
WHERE pcs.status_id >= 120
56+
AND pcs.component_id = c.component_id
6157
AND pcs.status_id != 150
6258
AND pcs.coder_id = @userId@
6359
) THEN 'Viewed'::nvarchar(50)
6460
END AS status
6561
, NVL((
6662
SELECT
67-
points
68-
FROM component_state cs
69-
INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
70-
INNER JOIN submission s ON s.submission_number = cs.submission_number AND s.component_state_id = cs.component_state_id
71-
WHERE cs.coder_id = @userId@
72-
AND s.submit_time = (
73-
SELECT MAX(submit_time)
74-
FROM component_state cs
75-
INNER JOIN submission s ON s.submission_number = cs.submission_number AND s.component_state_id = cs.component_state_id
76-
INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id)
63+
points
64+
FROM practice_component_state pcs
65+
WHERE pcs.round_id = rc.round_id
66+
AND pcs.component_id = c.component_id
67+
AND pcs.coder_id = @userId@
7768
), 0) AS my_points
7869
FROM problem p
70+
INNER JOIN component c ON c.problem_id = p.problem_id
71+
INNER JOIN round_component rc ON rc.component_id = c.component_id
72+
INNER JOIN room ro ON ro.round_id = rc.round_id AND ro.room_type_id = 3 -- practice room
7973
INNER JOIN problem_type_lu ptl ON ptl.problem_type_id = p.problem_type_id
8074
WHERE p.status_id = 90
8175
)) srp

queries/get_practice_problems_count

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,77 +2,71 @@ SELECT COUNT(*) AS total_count
22
FROM table(MULTISET(
33
SELECT
44
p.problem_id
5+
, c.component_id
6+
, ro.room_id
7+
, rc.round_id
8+
, rc.division_id
59
, p.name AS problem_name
610
, ptl.problem_type_desc AS problem_type
711
, CASE WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 1) THEN 'Easy'::nvarchar(50)
812
WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 2) THEN 'Medium'::nvarchar(50)
913
WHEN (p.problem_type_id = 1 AND p.proposed_difficulty_id = 3) THEN 'Hard'::nvarchar(50)
1014
END AS difficulty
11-
, (
12-
SELECT DISTINCT rc.points
13-
FROM round_component rc
14-
INNER JOIN component c ON c.component_id = rc.component_id AND c.problem_id = p.problem_id
15-
INNER JOIN round_segment rs ON rs.round_id = rc.round_id AND rs.segment_id = 1
16-
WHERE rs.start_time = (SELECT MAX(rss.start_time) FROM round_component rc
17-
INNER JOIN component c ON c.component_id = rc.component_id AND c.problem_id = p.problem_id
18-
INNER JOIN round_segment rss ON rss.round_id = rc.round_id AND rss.segment_id = 1)
19-
)AS points
15+
, rc.points
2016
, CASE WHEN EXISTS (
2117
SELECT 1
2218
FROM component_state cs
23-
INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
2419
WHERE cs.status_id < 120
20+
AND cs.component_id = c.component_id
2521
AND cs.coder_id = @userId@
2622
UNION ALL
2723
SELECT 1
2824
FROM practice_component_state pcs
29-
INNER JOIN component c ON c.component_id = pcs.component_id AND c.problem_id = p.problem_id
3025
WHERE pcs.status_id < 120
26+
AND pcs.component_id = c.component_id
3127
AND pcs.coder_id = @userId@
3228
) THEN 'New'::nvarchar(50)
3329
WHEN EXISTS (
3430
SELECT 1
3531
FROM component_state cs
36-
INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
3732
WHERE cs.status_id = 150
33+
AND cs.component_id = c.component_id
3834
AND cs.coder_id = @userId@
3935
UNION ALL
4036
SELECT 1
4137
FROM practice_component_state pcs
42-
INNER JOIN component c ON c.component_id = pcs.component_id AND c.problem_id = p.problem_id
4338
WHERE pcs.status_id = 150
39+
AND pcs.component_id = c.component_id
4440
AND pcs.coder_id = @userId@
4541
) THEN 'Solved'::nvarchar(50)
4642
WHEN EXISTS (
4743
SELECT 1
4844
FROM component_state cs
49-
INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
5045
WHERE cs.status_id >= 120
46+
AND cs.component_id = c.component_id
5147
AND cs.status_id != 150
5248
AND cs.coder_id = @userId@
5349
UNION ALL
5450
SELECT 1
5551
FROM practice_component_state pcs
56-
INNER JOIN component c ON c.component_id = pcs.component_id AND c.problem_id = p.problem_id
5752
WHERE pcs.status_id >= 120
53+
AND pcs.component_id = c.component_id
5854
AND pcs.status_id != 150
5955
AND pcs.coder_id = @userId@
6056
) THEN 'Viewed'::nvarchar(50)
6157
END AS status
6258
, NVL((
6359
SELECT
64-
points
65-
FROM component_state cs
66-
INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id
67-
INNER JOIN submission s ON s.submission_number = cs.submission_number AND s.component_state_id = cs.component_state_id
68-
WHERE cs.coder_id = @userId@
69-
AND s.submit_time = (
70-
SELECT MAX(submit_time)
71-
FROM component_state cs
72-
INNER JOIN submission s ON s.submission_number = cs.submission_number AND s.component_state_id = cs.component_state_id
73-
INNER JOIN component c ON c.component_id = cs.component_id AND c.problem_id = p.problem_id)
60+
points
61+
FROM practice_component_state pcs
62+
WHERE pcs.round_id = rc.round_id
63+
AND pcs.component_id = c.component_id
64+
AND pcs.coder_id = @userId@
7465
), 0) AS my_points
7566
FROM problem p
67+
INNER JOIN component c ON c.problem_id = p.problem_id
68+
INNER JOIN round_component rc ON rc.component_id = c.component_id
69+
INNER JOIN room ro ON ro.round_id = rc.round_id AND ro.room_type_id = 3 -- practice room
7670
INNER JOIN problem_type_lu ptl ON ptl.problem_type_id = p.problem_type_id
7771
WHERE p.status_id = 90
7872
)) srp

test/sqls/srmPracticeProblems/informixoltp__clean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
DELETE FROM round_segment WHERE round_id >= 5000 AND round_id <= 6000;
22
DELETE FROM round_component WHERE round_id >= 5000 AND round_id <= 6000;
33
DELETE FROM practice_component_state WHERE component_state_id >= 7000 AND component_state_id <= 8000;
4-
DELETE FROM submission WHERE component_state_id >= 7000 AND submission_number <= 8000;
54
DELETE FROM component_state WHERE component_state_id >= 7000 AND component_state_id <= 8000;
5+
DELETE FROM room WHERE room_id >= 5000 AND room_id <= 6000;
66
DELETE FROM round WHERE round_id >= 5000 AND round_id <= 6000;
77
DELETE FROM contest WHERE contest_id >= 4000 AND contest_id <= 5000;
88
DELETE FROM component WHERE problem_id IN (2001, 2002, 2003, 2004, 2005);

0 commit comments

Comments
 (0)