v0.2 Preview: Construction Plan.
CI / test (push) Failing after 1m31s

This commit is contained in:
2026-08-08 21:25:27 +08:00
parent b88d15698a
commit 1f98f7152d
822 changed files with 96959 additions and 8 deletions
@@ -0,0 +1 @@
@@ -0,0 +1,112 @@
from django.core.management.base import BaseCommand
from contest.models import Contest, ContestQuestion, Question, QuestionVersion
QUESTIONS = {
Question.Track.BEGINNER: [
("b-12-plus-19", "12 + 19", "31"),
("b-8-times-7", "8 × 7", "56"),
("b-90-minus-37", "90 - 37", "53"),
("b-144-div-12", "144 ÷ 12", "12"),
("b-25-times-4", "25 × 4", "100"),
],
Question.Track.STANDARD: [
("s-17-times-23", "17 × 23", "391"),
("s-625-div-25", "625 ÷ 25", "25"),
("s-48-times-15", "48 × 15", "720"),
("s-1000-minus-387", "1000 - 387", "613"),
("s-35-squared", "35²", "1225"),
],
Question.Track.ADVANCED: [
("a-mod-2pow10", "2¹⁰ 除以 7 的余数", "2"),
("a-sum-1-50", "1 到 50 的整数和", "1275"),
("a-15-choose-2", "C(15,2)", "105"),
("a-sqrt-2025", "√2025", "45"),
("a-3pow6", "3⁶", "729"),
],
}
class Command(BaseCommand):
help = "创建首批分层题目、实时 1v1、每日赛和单人练习"
def handle(self, *args, **options):
versions = {}
for track, questions in QUESTIONS.items():
versions[track] = []
for slug, prompt, answer in questions:
question, _ = Question.objects.update_or_create(
slug=slug,
defaults={"track": track, "tags": ["口算"], "is_active": True},
)
version, _ = QuestionVersion.objects.update_or_create(
question=question,
version=1,
defaults={
"prompt": prompt,
"answer": answer,
"explanation": f"答案为 {answer}",
},
)
versions[track].append(version)
contest_specs = []
for track, label in (
(Question.Track.BEGINNER, "入门"),
(Question.Track.STANDARD, "标准"),
(Question.Track.ADVANCED, "进阶"),
):
contest_specs.extend(
[
(
f"realtime-{track}",
f"{label}实时 1v1",
Contest.Kind.REALTIME,
track,
60,
),
(
f"daily-{track}",
f"{label}今日挑战",
Contest.Kind.DAILY,
track,
180,
),
(
f"practice-{track}",
f"{label}单人闯关",
Contest.Kind.PRACTICE,
track,
300,
),
]
)
for slug, title, kind, track, duration in contest_specs:
contest, _ = Contest.objects.update_or_create(
slug=slug,
defaults={
"title": title,
"kind": kind,
"track": track,
"duration_seconds": duration,
"status": Contest.Status.PUBLISHED,
},
)
ContestQuestion.objects.filter(contest=contest).delete()
ContestQuestion.objects.bulk_create(
[
ContestQuestion(
contest=contest,
question_version=version,
order=index,
points=100,
)
for index, version in enumerate(versions[track], start=1)
]
)
self.stdout.write(
self.style.SUCCESS(
f"已创建 {sum(map(len, QUESTIONS.values()))} 道题和 {len(contest_specs)} 场比赛"
)
)