diff --git a/.github/ISSUE_TEMPLATE/event.yml b/.github/ISSUE_TEMPLATE/event.yml new file mode 100644 index 0000000..251f932 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/event.yml @@ -0,0 +1,39 @@ +name: 推荐活动或更新活动信息 +description: 为活动与竞赛中心提供公开来源、时间修正或参与经验 +title: '[活动] ' +body: + - type: input + id: name + attributes: + label: 活动名称 + validations: + required: true + - type: dropdown + id: kind + attributes: + label: 活动类型 + options: + - 开源活动 + - 学科竞赛 + - 社区共建 + validations: + required: true + - type: input + id: source + attributes: + label: 官方来源链接 + description: 提供可公开访问的官网或正式通知地址。 + validations: + required: true + - type: textarea + id: details + attributes: + label: 推荐或修正内容 + description: 请说明面向对象、年份或届次、报名时间与时区;不确定的信息写待确认。修正已有活动时请附本站页面地址。 + validations: + required: true + - type: textarea + id: experience + attributes: + label: 参与经验(可选) + description: 注明参加年份,将个人经验与官方规则分开。不填写个人隐私或非公开材料。 diff --git a/.github/pr-assets/events-center-desktop.png b/.github/pr-assets/events-center-desktop.png new file mode 100644 index 0000000..a0f3291 Binary files /dev/null and b/.github/pr-assets/events-center-desktop.png differ diff --git a/.github/pr-assets/events-center-mobile.png b/.github/pr-assets/events-center-mobile.png new file mode 100644 index 0000000..f0584e8 Binary files /dev/null and b/.github/pr-assets/events-center-mobile.png differ diff --git a/.gitignore b/.gitignore index a4113e4..bef890a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ node_modules/ +.playwright-cli/ +output/playwright/ dist/ .vitepress/cache/ .vitepress/dist/ diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml index 28a9f55..bc2a643 100644 --- a/.markdownlint-cli2.yaml +++ b/.markdownlint-cli2.yaml @@ -11,6 +11,8 @@ config: - ContentMeta - ElectiveCourseTable - HomePage + - EventCenter + - EventDetails - MaterialResourceList - ProgrammingLanguageNav - XingshuCampusMap diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9dfc567..28251b5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -56,6 +56,31 @@ sources: 政策、流程、培养方案、奖助、考试等高风险内容应优先引用公开正式来源。没有来源时,只能提交待核验模板。 +## 活动与竞赛中心 + +活动中心位于 `/events/`,每个活动在 `docs/events/` 下使用独立 Markdown 详情页。普通 Front Matter 之外增加 `event` 字段,列表在构建时自动读取这些字段;不要另建一份卡片数据。 + +```yaml +event: + kind: 开源活动 # 开源活动 / 学科竞赛 / 社区共建 + eyebrow: 活动封面标题 + cover: code # summer / code / fest / blue / ladder / wiki + tags: [Git, 项目实践] + beginner: false # 本站入门建议,不代表官方资格 + schedule: 当届时间待核实 + checked: '2026-09-12' # 资料核查日期 + official: https://example.com/ + order: 10 +``` + +正文包含活动简介、参与入口、时间说明、准备建议和公开来源,并在标题后放置 ``。`official` 必须同时出现在页面的 `sources` 中。目录和侧边栏自动读取详情页 Front Matter,无需手动添加重复的导航数据。 + +只对有来源的时间填写 `registrationOpen`、`registrationClose`、`start`、`end`,格式为含时区的 ISO 8601 时间,例如 `'2026-10-01T09:00:00+08:00'`。开放报名必须同时提供截止时间。未核验的届次使用 `status: needs-review`,不推测截止日期。长期贡献入口可填写 `ongoing: true`;手动归档用 `archived: true`。 + +状态按报名窗口、活动周期和当前时间计算。到达 `end` 的活动自动进入历史归档;报名截止但未开始的活动仍在目录中,标注“报名已截止”。有开始时间但没有结束时间时,不自动推断“进行中”。年度活动若含延长周期,应在正文解释,不能让“进行中”被误解为可报名。页面打开后每分钟刷新时间状态,无需后台服务。 + +封面由站内 CSS 图形与文字生成,不需要复制第三方海报。字段校验、状态边界和真实活动来源一致性已纳入 `pnpm check`。活动建议可通过 `.github/ISSUE_TEMPLATE/event.yml` 提交。 + ## 本地检查 ```bash @@ -65,3 +90,13 @@ pnpm build ``` 不要通过关闭规则、删除测试或忽略错误来让检查通过。 + +### 活动名称、别名与收录范围 + +活动详情的 `title` 使用可核验的完整名称,`event.eyebrow` 可使用封面简称,`event.aliases` 保存常见缩写或历史名称。更名须在正文说明对应届次并附来源;不要把旧名称直接覆盖为没有出处的新名称。目录、详情和侧边栏均从详情页 Front Matter 生成。 + +`event.topic` 表示主要实践方向,用于筛选。优先复用已有方向:程序设计、软件开发、综合计算机、人工智能与数据、网络安全、系统开发、数学建模、机器人与硬件、创新创业、开源实践。 + +`event.scope: series` 表示常设赛事或活动入口,状态为“查看当届通知”,不可附带 `ongoing`、`archived` 或具体起止时间。`event.scope: edition` 表示具体活动,可按来源填写已核验时间。仅有日期但没有时刻的通知可以写入 `schedule` 和正文,不补写不存在的精确截止时间。 + +父赛事、子赛项、不同地区和届次不应重复充当独立机会以增加目录数量。来源访问受限时保留明确的待核验说明,研究依据见 [活动收录研究](docs/events/research.md)。 diff --git a/docs/.vitepress/event-clock.data.ts b/docs/.vitepress/event-clock.data.ts new file mode 100644 index 0000000..cb548a0 --- /dev/null +++ b/docs/.vitepress/event-clock.data.ts @@ -0,0 +1,8 @@ +declare const data: number; +export { data }; + +export default { + load() { + return Date.now(); + }, +}; diff --git a/docs/.vitepress/event-schema.ts b/docs/.vitepress/event-schema.ts new file mode 100644 index 0000000..979e414 --- /dev/null +++ b/docs/.vitepress/event-schema.ts @@ -0,0 +1,54 @@ +import { z } from 'zod'; + +import { eventKinds } from './events'; +const timestamp = z.string().datetime({ offset: true }); +export const eventSchema = z + .object({ + kind: z.enum(eventKinds), + scope: z.enum(['series', 'edition']).optional(), + aliases: z.array(z.string().min(1)).optional(), + topic: z.string().min(1).optional(), + eyebrow: z.string().min(1), + cover: z.enum(['summer', 'code', 'fest', 'blue', 'ladder', 'wiki']), + tags: z.array(z.string().min(1)).min(1), + beginner: z.boolean(), + schedule: z.string().min(1), + checked: z.string().regex(/^\d{4}-\d{2}-\d{2}$/), + official: z.string().url(), + order: z.number(), + ongoing: z.boolean().optional(), + archived: z.boolean().optional(), + registrationOpen: timestamp.optional(), + registrationClose: timestamp.optional(), + start: timestamp.optional(), + end: timestamp.optional(), + }) + .superRefine((event, context) => { + if ( + event.scope === 'series' && + (event.ongoing || + event.archived || + event.registrationOpen || + event.registrationClose || + event.start || + event.end) + ) { + context.addIssue({ + code: z.ZodIssueCode.custom, + message: '常设入口不得混入具体届次的报名、起止或归档状态', + }); + } + for (const [a, b] of [ + [event.registrationOpen, event.registrationClose], + [event.start, event.end], + ]) { + if (a && b && Date.parse(a) >= Date.parse(b)) { + context.addIssue({ code: z.ZodIssueCode.custom, message: '活动起止时间顺序错误' }); + } + } + if (event.registrationOpen && !event.registrationClose) { + context.addIssue({ code: z.ZodIssueCode.custom, message: '开放报名必须提供截止时间' }); + } + }); + +export type EventInfo = z.infer; diff --git a/docs/.vitepress/event-sidebar.ts b/docs/.vitepress/event-sidebar.ts new file mode 100644 index 0000000..bdc30e7 --- /dev/null +++ b/docs/.vitepress/event-sidebar.ts @@ -0,0 +1,44 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import matter from 'gray-matter'; +import type { DefaultTheme } from 'vitepress'; +import { eventSchema } from './event-schema'; +import { eventKinds } from './events'; + +// Build-time only: titles share the same source as the directory and detail pages. +export function eventSidebar(): DefaultTheme.SidebarItem[] { + const root = path.resolve('docs/events'); + const entries = fs + .readdirSync(root) + .filter((file) => file.endsWith('.md')) + .flatMap((file) => { + const { data } = matter.read(path.join(root, file)); + if (!data.event) return []; + return [ + { + title: String(data.title), + link: `/events/${file.slice(0, -3)}`, + event: eventSchema.parse(data.event), + }, + ]; + }) + .sort((a, b) => a.event.order - b.event.order); + return [ + { + text: '活动与竞赛', + items: [ + { text: '探索活动', link: '/events/' }, + { text: '收录研究与名称核验', link: '/events/research' }, + { text: '推荐活动与补充经验', link: '/events/contribute' }, + { text: '竞赛学习指南', link: '/competitions/' }, + ], + }, + ...eventKinds.map((kind) => ({ + text: kind, + collapsed: true, + items: entries + .filter((entry) => entry.event.kind === kind) + .map((entry) => ({ text: entry.title, link: entry.link })), + })), + ]; +} diff --git a/docs/.vitepress/events.data.ts b/docs/.vitepress/events.data.ts new file mode 100644 index 0000000..287dc1c --- /dev/null +++ b/docs/.vitepress/events.data.ts @@ -0,0 +1,20 @@ +import { createContentLoader } from 'vitepress'; +import { eventSchema } from './event-schema'; +import type { EventItem } from './events'; + +declare const data: EventItem[]; +export { data }; + +export default createContentLoader('events/*.md', { + transform(pages): EventItem[] { + return pages + .filter((page) => page.frontmatter.event) + .map((page) => ({ + ...eventSchema.parse(page.frontmatter.event), + title: page.frontmatter.title, + description: page.frontmatter.description, + url: page.url, + })) + .sort((a, b) => a.order - b.order); + }, +}); diff --git a/docs/.vitepress/events.ts b/docs/.vitepress/events.ts new file mode 100644 index 0000000..de30e7b --- /dev/null +++ b/docs/.vitepress/events.ts @@ -0,0 +1,67 @@ +import type { EventInfo } from './event-schema'; +export type { EventInfo } from './event-schema'; +export const eventKinds = ['开源活动', '学科竞赛', '社区共建'] as const; + +export type EventItem = EventInfo & { title: string; description: string; url: string }; +export type EventStatus = + | '长期开放' + | '报名中' + | '报名已截止' + | '即将开始' + | '进行中' + | '已结束' + | '查看当届通知' + | '时间待确认'; + +export function eventStatus(event: EventInfo, now: number): EventStatus { + if (event.scope === 'series') return '查看当届通知'; + if (event.archived || (event.end && now >= Date.parse(event.end))) return '已结束'; + if (event.ongoing) return '长期开放'; + if ( + event.registrationOpen && + event.registrationClose && + now >= Date.parse(event.registrationOpen) && + now < Date.parse(event.registrationClose) + ) + return '报名中'; + if (event.start && event.end && now >= Date.parse(event.start)) return '进行中'; + if (event.registrationClose && now >= Date.parse(event.registrationClose)) return '报名已截止'; + if (event.start && now < Date.parse(event.start)) return '即将开始'; + return '时间待确认'; +} + +export function filterEvents( + items: EventItem[], + filters: { + query: string; + kind: string; + status: string; + beginner: boolean; + archive: boolean; + topic?: string; + }, + now: number, +) { + const words = filters.query.trim().toLocaleLowerCase().split(/\s+/).filter(Boolean); + return items.filter((event) => { + const status = eventStatus(event, now); + const searchable = [ + event.title, + event.description, + event.eyebrow, + event.topic, + ...(event.aliases ?? []), + ...event.tags, + ] + .join(' ') + .toLocaleLowerCase(); + return ( + (filters.archive ? status === '已结束' : status !== '已结束') && + (!filters.kind || event.kind === filters.kind) && + (!filters.topic || event.topic === filters.topic) && + (!filters.status || status === filters.status) && + (!filters.beginner || event.beginner) && + words.every((word) => searchable.includes(word)) + ); + }); +} diff --git a/docs/.vitepress/sidebar.ts b/docs/.vitepress/sidebar.ts index b846d27..de9b730 100644 --- a/docs/.vitepress/sidebar.ts +++ b/docs/.vitepress/sidebar.ts @@ -1,6 +1,8 @@ import type { DefaultTheme } from 'vitepress'; +import { eventSidebar } from './event-sidebar'; export const sidebar: DefaultTheme.Sidebar = { + '/events/': eventSidebar(), '/start/': [ { text: '新生专题', @@ -62,6 +64,7 @@ export const sidebar: DefaultTheme.Sidebar = { { text: '学科竞赛', items: [ + { text: '活动与竞赛中心', link: '/events/' }, { text: '总览', link: '/competitions/' }, { text: '算法类竞赛', link: '/competitions/algorithm' }, { text: '软件类竞赛', link: '/competitions/software' }, diff --git a/docs/.vitepress/site-map.ts b/docs/.vitepress/site-map.ts index e37ce25..6ffe8df 100644 --- a/docs/.vitepress/site-map.ts +++ b/docs/.vitepress/site-map.ts @@ -40,16 +40,17 @@ export const siteSections: SiteSection[] = [ title: '学业与课程', }, { - activeMatch: '^/(competitions|development|research|career)/', + activeMatch: '^/(events|competitions|development|research|career)/', description: '连接竞赛、开发、科研实践与升学就业。', index: '03', links: [ + { href: '/events/', title: '活动与竞赛' }, { href: '/competitions/', title: '学科竞赛' }, { href: '/development/', title: '开发与工具' }, { href: '/research/', title: '科研与项目' }, { href: '/career/', title: '升学与就业' }, ], - primaryHref: '/competitions/', + primaryHref: '/events/', title: '成长与实践', }, { diff --git a/docs/.vitepress/theme/components/EventCenter.vue b/docs/.vitepress/theme/components/EventCenter.vue new file mode 100644 index 0000000..0fa0bc7 --- /dev/null +++ b/docs/.vitepress/theme/components/EventCenter.vue @@ -0,0 +1,300 @@ + + + + + diff --git a/docs/.vitepress/theme/components/EventDetails.vue b/docs/.vitepress/theme/components/EventDetails.vue new file mode 100644 index 0000000..1c7d55d --- /dev/null +++ b/docs/.vitepress/theme/components/EventDetails.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/docs/.vitepress/theme/events.css b/docs/.vitepress/theme/events.css new file mode 100644 index 0000000..d8190e9 --- /dev/null +++ b/docs/.vitepress/theme/events.css @@ -0,0 +1,905 @@ +.events-page { + --event-ink: #23324b; + --event-muted: #68768a; + --event-line: #e3e8ee; + --event-accent: #3d58c9; + --event-paper: #fff; + --event-bg: #f8fafc; + background: var(--event-bg); + color: var(--event-ink); + padding: 30px 32px 48px; +} +.dark .events-page { + --event-ink: #e6ebf5; + --event-muted: #a6b1c6; + --event-line: #343d50; + --event-accent: #a8b8ff; + --event-paper: #202633; + --event-bg: #191e28; +} +.events-wrap { + max-width: 1184px; + margin: 0 auto; +} +.events-page a { + text-decoration: none; +} +.events-page button, +.events-page a, +.events-page input, +.events-page select { + -webkit-tap-highlight-color: transparent; +} +.events-page :is(a, button, input, select):focus-visible { + outline: 3px solid var(--event-accent); + outline-offset: 4px; +} +.events-page button { + cursor: pointer; +} +.events-breadcrumb { + display: flex; + align-items: center; + gap: 13px; + color: var(--event-muted); + font-size: 12px; +} +.events-breadcrumb strong { + font-weight: 500; + color: var(--event-ink); +} +.events-breadcrumb a:hover { + color: var(--event-accent); +} +.events-hero { + display: grid; + grid-template-columns: 1.15fr 1fr; + align-items: center; + padding: 52px 0 38px; + gap: 30px; +} +.events-eyebrow { + display: flex; + align-items: center; + gap: 9px; + color: var(--event-accent); + font: 600 10px/1.5 var(--vp-font-family-mono); + letter-spacing: 2px; + margin: 0; +} +.events-eyebrow > span { + width: 6px; + height: 6px; + border-radius: 50%; + background: var(--event-accent); +} +.events-hero h1 { + margin: 23px 0 22px; + font-size: clamp(32px, 3.5vw, 48px); + font-weight: 750; + letter-spacing: -1.8px; + line-height: 1.4; +} +.events-hero h1 span { + color: var(--event-accent); +} +.events-lead { + font-size: 15px; + line-height: 1.9; + color: var(--event-muted); + margin: 0; +} +.events-hero-actions { + display: flex; + align-items: center; + gap: 26px; + margin-top: 28px; +} +.events-button { + display: inline-flex; + justify-content: center; + align-items: center; + gap: 24px; + border: 1px solid var(--event-line); + border-radius: 8px; + padding: 11px 20px; + font-size: 13px; + font-weight: 600; + background: var(--event-paper); + color: var(--event-ink); + transition: + transform 160ms, + border-color 160ms; +} +.events-button:hover { + transform: translateY(-2px); + border-color: var(--event-accent); +} +.events-button.primary { + color: #fff; + background: #3d58c9; + border-color: #3d58c9; + box-shadow: 0 4px 12px #3d58c91a; +} +.events-text-link { + color: var(--event-muted); + display: flex; + gap: 14px; + font-size: 13px; +} +.events-text-link:hover { + color: var(--event-accent); +} +.events-hero-note { + display: flex; + align-items: center; + gap: 10px; + font-size: 11px; + color: var(--event-muted); + margin-top: 27px; +} +.events-hero-note > span { + color: #3e8873; + font-size: 17px; +} +.events-hero-note i { + font-style: normal; + opacity: 0.5; +} +.events-art { + height: 355px; + position: relative; + overflow: hidden; + isolation: isolate; + background: radial-gradient(ellipse, #dfe7fa99, transparent 70%); +} +.dark .events-art { + background: radial-gradient(ellipse, #46578244, transparent 70%); +} +.events-orbit { + border: 1px solid #a5b8d940; + border-radius: 50%; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%) rotate(-24deg); + width: 430px; + height: 235px; +} +.orbit-two { + transform: translate(-50%, -50%) rotate(40deg); + width: 370px; + height: 305px; + border-style: dashed; +} +.art-code { + position: absolute; + top: 56px; + left: 26%; + width: 235px; + height: 235px; + background: linear-gradient(135deg, #536cdd, #324aae); + border: 1px solid #ffffff70; + border-radius: 21px; + transform: rotate(-9deg); + box-shadow: + 15px 24px 42px #3d58c925, + inset 0 0 0 7px #ffffff08; + display: flex; + flex-direction: column; + align-items: flex-start; + padding: 19px 25px; +} +.art-dots { + font-size: 8px; + letter-spacing: 4px; + color: #bacaff; +} +.art-code-mark { + color: #fff; + font: 500 65px/1.6 var(--vp-font-family-mono); + letter-spacing: -6px; + align-self: center; +} +.art-code-line { + height: 5px; + width: 125px; + background: #91b4f5; + border-radius: 5px; + margin-top: 7px; +} +.art-code-line.short { + width: 76px; + background: #7c8fdb; +} +.art-code-caption { + color: #dbe5ff; + margin-top: 13px; + font: 10px var(--vp-font-family-mono); +} +.art-label { + position: absolute; + font: 9px var(--vp-font-family-mono); + letter-spacing: 1.3px; + color: var(--event-muted); +} +.label-top { + top: 16px; + left: 19%; +} +.label-bottom { + bottom: 15px; + right: 12%; +} +.art-chip { + position: absolute; + display: flex; + align-items: center; + gap: 12px; + background: var(--event-paper); + border: 1px solid var(--event-line); + box-shadow: 0 8px 24px #2839540d; + border-radius: 10px; + z-index: 1; +} +.chip-branch { + left: 6%; + bottom: 57px; + padding: 16px; + transform: rotate(-4deg); + font: 11px var(--vp-font-family-mono); +} +.chip-branch svg { + width: 22px; + height: 22px; + fill: none; + stroke: #42866f; + stroke-width: 1.6; +} +.chip-star { + right: 1%; + top: 84px; + padding: 12px 16px; + color: #bd8c43; + font-size: 28px; + transform: rotate(6deg); +} +.chip-star span { + font-size: 11px; + color: var(--event-ink); +} +.events-start { + display: flex; + align-items: center; + gap: 17px; + padding: 21px 25px; + border-radius: 11px; + border: 1px solid var(--event-line); + background: var(--event-paper); +} +.start-icon { + display: grid; + place-items: center; + width: 42px; + height: 42px; + background: #ebf0fc; + color: #3d58c9; + border-radius: 10px; + font-size: 23px; + flex-shrink: 0; +} +.events-start strong { + font-size: 14px; + font-weight: 600; +} +.events-start p { + margin: 4px 0 0; + font-size: 12px; + color: var(--event-muted); +} +.events-start > a { + margin-left: auto; + color: var(--event-accent); + font-size: 12px; + white-space: nowrap; +} +.events-start > a span { + margin-left: 16px; +} +.events-explore { + padding-top: 52px; + scroll-margin-top: 105px; +} +.events-section-heading { + display: flex; + justify-content: space-between; + align-items: end; + gap: 18px; + margin-bottom: 23px; +} +.events-section-heading .events-eyebrow { + color: var(--event-muted); + font-size: 9px; +} +.events-section-heading h2 { + margin: 8px 0 0; + font-size: 25px; + font-weight: 700; + letter-spacing: -0.6px; + line-height: 1.5; +} +.events-section-heading h2 > span { + font-size: 12px; + font-weight: 400; + color: var(--event-muted); + letter-spacing: 0; + margin-left: 18px; +} +.events-view-switch { + display: flex; + padding: 4px; + border: 1px solid var(--event-line); + border-radius: 8px; + background: var(--event-paper); +} +.events-view-switch button { + padding: 6px 12px; + border-radius: 5px; + font-size: 11px; + color: var(--event-muted); +} +.events-view-switch button.active { + background: var(--event-bg); + color: var(--event-ink); + font-weight: 600; +} +.events-filter-panel { + border: 1px solid var(--event-line); + border-radius: 10px; + background: var(--event-paper); + margin-bottom: 24px; + padding: 0 20px; +} +.events-filter-top { + display: flex; + justify-content: space-between; + align-items: center; + gap: 20px; + border-bottom: 1px solid var(--event-line); + min-height: 73px; +} +.events-tabs { + display: flex; + align-items: center; + gap: 7px; +} +.events-tabs button { + padding: 8px 12px; + border-radius: 6px; + color: var(--event-muted); + font-size: 12px; + white-space: nowrap; +} +.events-tabs button span { + padding-left: 6px; + font-size: 10px; + opacity: 0.75; +} +.events-tabs button.active { + background: #eef1fc; + color: #3d58c9; + font-weight: 600; +} +.dark .events-tabs button.active { + background: #354268; + color: #dae2ff; +} +.events-search { + display: flex; + align-items: center; + gap: 9px; + background: var(--event-bg); + border: 1px solid var(--event-line); + border-radius: 7px; + padding: 8px 11px; + width: 275px; +} +.events-search svg { + width: 17px; + height: 17px; + fill: none; + stroke: var(--event-muted); + stroke-width: 1.6; + flex-shrink: 0; +} +.events-search input { + width: 100%; + min-width: 0; + font-size: 12px; + color: var(--event-ink); + background: transparent; +} +.events-search input::placeholder { + color: var(--event-muted); +} +.events-filter-bottom { + display: flex; + align-items: center; + justify-content: space-between; + gap: 14px; + min-height: 60px; + padding: 12px 0; +} +.events-filter-options { + display: flex; + align-items: center; + gap: 24px; + font-size: 11px; + color: var(--event-muted); +} +.events-filter-options label { + display: flex; + gap: 12px; + align-items: center; +} +.events-filter-options select { + padding: 5px 23px 5px 9px; + border: 1px solid var(--event-line); + border-radius: 5px; + color: var(--event-ink); + background: var(--event-paper); + appearance: auto; + font-size: 11px; +} +.events-filter-options select:disabled { + opacity: 0.5; +} +.events-checkbox { + cursor: pointer; +} +.events-checkbox input { + accent-color: #3d58c9; + width: 14px; + height: 14px; +} +.events-reset { + color: var(--event-accent); +} +.events-result { + font-size: 11px; + color: var(--event-muted); + white-space: nowrap; +} +.events-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 23px; +} +.event-card { + min-width: 0; + border: 1px solid var(--event-line); + border-radius: 12px; + overflow: hidden; + background: var(--event-paper); + transition: + box-shadow 180ms, + transform 180ms; + display: flex; + flex-direction: column; +} +.event-card:hover { + transform: translateY(-4px); + box-shadow: 0 14px 32px #25355712; +} +.event-cover { + position: relative; + height: 176px; + display: flex; + flex-direction: column; + justify-content: space-between; + overflow: hidden; + padding: 19px 23px; + isolation: isolate; + color: #fff; +} +.event-cover::before, +.event-cover::after { + content: ''; + position: absolute; + border: 1px solid #ffffff24; + width: 250px; + height: 250px; + border-radius: 50%; + right: -55px; + top: -45px; + z-index: -1; +} +.event-cover::after { + width: 180px; + height: 180px; + right: -20px; + top: -10px; +} +.cover-summer { + background: linear-gradient(120deg, #276a58, #539c76); +} +.cover-code { + background: linear-gradient(120deg, #253b75, #5b75bd); +} +.cover-fest { + background: linear-gradient(120deg, #593d78, #9c6790); +} +.cover-blue { + background: linear-gradient(120deg, #2662a3, #6099cb); +} +.cover-ladder { + background: linear-gradient(120deg, #975c38, #c49160); +} +.cover-wiki { + background: linear-gradient(120deg, #3d548f, #788bc1); +} +.cover-category { + align-self: flex-start; + font-size: 10px; + border: 1px solid #ffffff40; + background: #ffffff10; + padding: 1px 7px; + border-radius: 4px; +} +.cover-word { + font-size: 25px; + font-weight: 650; + line-height: 1.2; + letter-spacing: -0.5px; + max-width: 80%; + text-shadow: 0 1px 3px #0002; +} +.cover-footer { + display: flex; + justify-content: space-between; + font: 9px var(--vp-font-family-mono); + letter-spacing: 1px; + opacity: 0.85; +} +.cover-footer > span { + font-size: 16px; +} +.cover-decoration { + position: absolute; + right: 23px; + top: 53px; + font: 65px var(--vp-font-family-mono); + color: #ffffff22; + transform: rotate(-12deg); + z-index: -1; +} +.event-card-body { + padding: 20px 21px 0; + display: flex; + flex-direction: column; + flex: 1; +} +.event-card-meta { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 10px; + color: var(--event-muted); +} +.event-status { + display: flex; + align-items: center; + gap: 6px; +} +.event-status > span { + width: 5px; + height: 5px; + background: #8b94a3; + border-radius: 50%; +} +.event-status.live { + color: #347c67; +} +.event-status.live > span { + background: #459278; +} +.dark .event-status.live { + color: #9adac5; +} +.event-beginner { + color: var(--event-muted); + background: var(--event-bg); + padding: 1px 6px; + border-radius: 4px; +} +.event-card h3 { + font-size: 17px; + font-weight: 650; + line-height: 1.5; + margin: 13px 0 8px; + letter-spacing: -0.3px; +} +.event-card h3 a:hover { + color: var(--event-accent); +} +.event-description { + font-size: 12px; + line-height: 1.9; + color: var(--event-muted); + margin: 0 0 17px; + min-height: 46px; +} +.event-tags { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin: auto 0 18px; +} +.event-tags span { + font-size: 10px; + color: var(--event-muted); + border: 1px solid var(--event-line); + padding: 1px 7px; + border-radius: 4px; +} +.event-card-footer { + border-top: 1px solid var(--event-line); + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + padding: 14px 0; + font-size: 10px; + color: var(--event-muted); +} +.event-card-footer > a { + flex-shrink: 0; + color: var(--event-accent); + font-weight: 600; +} +.event-card-footer > a > span { + margin-left: 6px; +} +.events-source-note { + margin: 18px 0 0; + font-size: 11px; + line-height: 1.9; + color: var(--event-muted); +} +.events-empty { + text-align: center; + padding: 64px 20px; + border: 1px dashed var(--event-line); + border-radius: 12px; + background: var(--event-paper); +} +.events-empty > span { + font-size: 38px; + color: var(--event-muted); +} +.events-empty h3 { + font-size: 19px; + margin-top: 12px; + font-weight: 600; +} +.events-empty p { + font-size: 13px; + color: var(--event-muted); + margin: 10px 0 20px; +} +.events-bottom { + display: flex; + justify-content: space-between; + align-items: center; + gap: 24px; + margin-top: 48px; + padding: 32px; + background: var(--event-paper); + border: 1px solid var(--event-line); + border-radius: 12px; +} +.events-bottom h2 { + font-size: 23px; + font-weight: 650; + letter-spacing: -0.6px; + margin: 9px 0; + line-height: 1.5; +} +.events-bottom p:not(.events-eyebrow) { + font-size: 12px; + color: var(--event-muted); + margin: 0; +} +.events-bottom .events-button { + flex-shrink: 0; +} +.events-learning { + display: flex; + align-items: center; + justify-content: center; + gap: 28px; + font-size: 11px; + margin-top: 28px; + color: var(--event-muted); +} +.events-learning a { + color: var(--event-accent); +} +@media (min-width: 1500px) { + .events-wrap { + max-width: 1240px; + } + .events-hero { + padding-top: 60px; + padding-bottom: 48px; + } + .event-cover { + height: 190px; + } +} +@media (max-width: 1000px) { + .events-hero { + grid-template-columns: 1.15fr 0.85fr; + } + .art-code { + left: 13%; + width: 215px; + } + .chip-star { + right: -20px; + } + .chip-branch { + left: 0; + } + .events-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .events-search { + width: 235px; + } + .events-tabs { + gap: 0; + } + .events-tabs button { + padding: 8px; + } +} +@media (max-width: 767px) { + .events-page { + padding: 24px 20px 100px; + } + .events-hero { + grid-template-columns: 1fr; + padding: 35px 0 28px; + gap: 8px; + } + .events-hero h1 { + font-size: 38px; + } + .events-art { + display: none; + } + .events-start { + padding: 18px; + flex-wrap: wrap; + gap: 12px; + } + .events-start > div { + flex: 1; + } + .events-start > a { + width: 100%; + margin: 4px 0 0 54px; + } + .events-start p { + font-size: 11px; + } + .events-section-heading { + align-items: center; + } + .events-section-heading h2 > span { + display: none; + } + .events-section-heading .events-eyebrow { + font-size: 8px; + letter-spacing: 0.8px; + } + .events-explore { + padding-top: 36px; + } + .events-view-switch button { + padding: 5px 8px; + } + .events-filter-panel { + padding: 0 14px; + } + .events-filter-top { + flex-direction: column; + align-items: stretch; + padding: 14px 0; + gap: 14px; + } + .events-tabs { + justify-content: space-between; + } + .events-search { + width: 100%; + } + .events-filter-options { + flex-wrap: wrap; + gap: 12px; + } + .events-filter-options label { + gap: 8px; + } + .events-filter-bottom { + align-items: flex-start; + } + .events-result { + padding-top: 6px; + } + .events-bottom { + padding: 24px; + flex-direction: column; + align-items: flex-start; + gap: 20px; + } + .events-bottom h2 { + font-size: 21px; + } + .events-learning { + flex-wrap: wrap; + gap: 12px 24px; + } + .events-learning > span { + width: 100%; + text-align: center; + } +} +@media (max-width: 540px) { + .events-grid { + grid-template-columns: 1fr; + gap: 20px; + } + .event-cover { + height: 170px; + } + .event-card-body { + padding: 20px 22px 0; + } + .event-description { + min-height: 0; + } + .events-hero h1 { + font-size: 34px; + } + .events-tabs button { + font-size: 11px; + padding: 7px 6px; + } + .events-tabs button span { + padding-left: 3px; + } + .events-filter-options { + gap: 10px; + } + .events-checkbox { + font-size: 10px; + } +} +@media (prefers-reduced-motion: reduce) { + .events-page *, + .events-page *::before, + .events-page *::after { + transition: none !important; + } +} +.events-load-more { + display: flex; + justify-content: center; + margin: 32px 0; +} +.events-source-note a { + color: var(--vp-c-brand-1); + text-decoration: underline; +} diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts index aff660a..62848f8 100644 --- a/docs/.vitepress/theme/index.ts +++ b/docs/.vitepress/theme/index.ts @@ -5,6 +5,8 @@ import AutoMergeTable from './components/AutoMergeTable.vue'; import ContentMeta from './components/ContentMeta.vue'; import ElectiveCourseTable from './components/ElectiveCourseTable.vue'; import HomePage from './components/HomePage.vue'; +import EventCenter from './components/EventCenter.vue'; +import EventDetails from './components/EventDetails.vue'; import MaterialResourceList from './components/MaterialResourceList.vue'; import ProgrammingLanguageNav from './components/ProgrammingLanguageNav.vue'; import ScsLayout from './components/ScsLayout.vue'; @@ -19,6 +21,8 @@ export default { app.component('ContentMeta', ContentMeta); app.component('ElectiveCourseTable', ElectiveCourseTable); app.component('HomePage', HomePage); + app.component('EventCenter', EventCenter); + app.component('EventDetails', EventDetails); app.component('MaterialResourceList', MaterialResourceList); app.component('ProgrammingLanguageNav', ProgrammingLanguageNav); app.component( diff --git a/docs/.vitepress/theme/useEventClock.ts b/docs/.vitepress/theme/useEventClock.ts new file mode 100644 index 0000000..654e894 --- /dev/null +++ b/docs/.vitepress/theme/useEventClock.ts @@ -0,0 +1,16 @@ +import { onMounted, onUnmounted, ref } from 'vue'; +import { data as builtAt } from '../event-clock.data'; + +export function useEventClock() { + // The generated timestamp is identical in server HTML and the hydration bundle. + const now = ref(builtAt); + let timer: ReturnType | undefined; + onMounted(() => { + now.value = Date.now(); + timer = setInterval(() => { + now.value = Date.now(); + }, 60000); + }); + onUnmounted(() => clearInterval(timer)); + return now; +} diff --git a/docs/competitions/index.md b/docs/competitions/index.md index 353d42c..77dbe76 100644 --- a/docs/competitions/index.md +++ b/docs/competitions/index.md @@ -17,6 +17,8 @@ sources: # 竞赛与实践总览 +想寻找可以参与的开源活动与比赛?前往[活动与竞赛中心](/events/),按方向筛选活动、查看官网入口与准备建议。 + 本页不说明学院或学校对竞赛的认定规则。竞赛认定、奖项统计、加分或报销等事项必须以正式通知为准。 ## 可以沉淀的内容 diff --git a/docs/events/astar.md b/docs/events/astar.md new file mode 100644 index 0000000..4f1b043 --- /dev/null +++ b/docs/events/astar.md @@ -0,0 +1,59 @@ +--- +title: '百度之星程序设计大赛' +description: '以程序设计与算法解题为主要内容,适合进行个人限时编程训练。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '百度之星程序设计大赛官方入口', 'url': 'https://astar.baidu.com/' }, + { 'name': '百度之星官方历届网站', 'url': 'https://astar2019.baidu.com/' }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['百度之星', 'Astar', 'Baidu Star'], + 'topic': '程序设计', + 'eyebrow': '百度之星', + 'cover': 'blue', + 'tags': ['算法', '程序设计'], + 'beginner': false, + 'schedule': '常设入口 · 当届赛程另查', + 'official': 'https://astar.baidu.com/', + 'order': 15, + 'checked': '2026-09-12', + } +--- + + + +# 百度之星程序设计大赛 + +以程序设计与算法解题为主要内容,适合进行个人限时编程训练。 + + + +## 名称与收录范围 + +官方历届网站使用“百度之星程序设计大赛”。本页仅用历届公开资料核实赛事名称与方向,不将旧届时间、奖金或参赛规则套用到 2026 年。 + +依据:[百度之星官方历届网站](https://astar2019.baidu.com/)。 + +## 准备建议 + +从公开历年题目开始,记录解题思路、复杂度和边界错误。报名时重新确认当届承办平台及资格。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/bdci.md b/docs/events/bdci.md new file mode 100644 index 0000000..5b5a6bf --- /dev/null +++ b/docs/events/bdci.md @@ -0,0 +1,65 @@ +--- +title: 'CCF大数据与计算智能大赛' +description: '从数据问题出发,实践建模、计算智能与可复现的算法评测。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { + 'name': 'CCF大数据与计算智能大赛官方入口', + 'url': 'https://www.ccf.org.cn/Chapters/TC/News_/2023-03-02/786790.shtml', + }, + { + 'name': 'CCF 数据库专委会:2025 BDCI 总结', + 'url': 'https://tc.ccf.org.cn/tcdb/news/2025-12-19/918824.shtml', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['BDCI', 'CCF BDCI'], + 'topic': '人工智能与数据', + 'eyebrow': 'CCF BDCI', + 'cover': 'fest', + 'tags': ['机器学习', '大数据'], + 'beginner': false, + 'schedule': '已核验 2025 总结 · 新届通知另查', + 'official': 'https://www.ccf.org.cn/Chapters/TC/News_/2023-03-02/786790.shtml', + 'order': 21, + 'checked': '2026-09-12', + } +--- + + + +# CCF大数据与计算智能大赛 + +从数据问题出发,实践建模、计算智能与可复现的算法评测。 + + + +## 名称与收录范围 + +CCF 官方介绍的名称为“CCF大数据与计算智能大赛”,缩写 BDCI。目录使用学会公开介绍作为稳定入口,已核验到 2025 年赛事总结;不将旧届合作平台、赛题或日程当作 2026 年安排。 + +依据:[CCF 数据库专委会:2025 BDCI 总结](https://tc.ccf.org.cn/tcdb/news/2025-12-19/918824.shtml)。 + +## 准备建议 + +建立数据划分、训练与验证的可复现流程,先完成基线再做改进。确认所选赛题的数据许可、外部数据与提交限制。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/blockchain.md b/docs/events/blockchain.md new file mode 100644 index 0000000..536d172 --- /dev/null +++ b/docs/events/blockchain.md @@ -0,0 +1,59 @@ +--- +title: 'CCF大学生区块链安全技术与创新应用竞赛' +description: '结合区块链安全与应用设计,完成技术方案、实现和测试验证。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': 'CCF大学生区块链安全技术与创新应用竞赛官方入口', 'url': 'https://btc.ccf.org.cn/' }, + { 'name': '2026 年第五届竞赛章程', 'url': 'https://btc.ccf.org.cn/competitioncharter' }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['CCF区块链竞赛', '区块链安全'], + 'topic': '网络安全', + 'eyebrow': '区块链安全与创新', + 'cover': 'code', + 'tags': ['区块链', '安全设计'], + 'beginner': false, + 'schedule': '2026 报名至 10 月 20 日 · 时刻见官网', + 'official': 'https://btc.ccf.org.cn/', + 'order': 33, + 'checked': '2026-09-12', + } +--- + + + +# CCF大学生区块链安全技术与创新应用竞赛 + +结合区块链安全与应用设计,完成技术方案、实现和测试验证。 + + + +## 名称与收录范围 + +官方章程使用“CCF大学生区块链安全技术与创新应用竞赛”。2026 年章程列出报名期 5 月 23 日至 10 月 20 日、作品提交期 9 月 1 日至 10 月 31 日,决赛日期标注预计。页面未给出的精确截止时刻不在本站补写。 + +依据:[2026 年第五届竞赛章程](https://btc.ccf.org.cn/competitioncharter)。 + +## 准备建议 + +明确区块链是否适合所选问题,完成系统方案、代码与测试材料。资格、组队和指导教师要求按章程逐项确认。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/c4-ai.md b/docs/events/c4-ai.md new file mode 100644 index 0000000..69cc135 --- /dev/null +++ b/docs/events/c4-ai.md @@ -0,0 +1,61 @@ +--- +title: '中国高校计算机大赛—人工智能创意赛' +description: '围绕人工智能应用与创意作品,探索从技术原型到场景验证的完整过程。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { + 'name': '中国高校计算机大赛—人工智能创意赛官方入口', + 'url': 'https://developer.huawei.com/home/C4-AI', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['C4-AI', '人工智能创意赛'], + 'topic': '人工智能与数据', + 'eyebrow': '人工智能创意赛', + 'cover': 'fest', + 'tags': ['人工智能', '应用创新'], + 'beginner': false, + 'schedule': '2026 官方入口 · 分项安排查页面', + 'official': 'https://developer.huawei.com/home/C4-AI', + 'order': 25, + 'checked': '2026-09-12', + } +--- + + + +# 中国高校计算机大赛—人工智能创意赛 + +围绕人工智能应用与创意作品,探索从技术原型到场景验证的完整过程。 + + + +## 名称与收录范围 + +官方页面使用“中国高校计算机大赛—人工智能创意赛”,标识为 C4-AI。2026 年页面包含鸿蒙高校创新赛、昇腾 AI 创新大赛等安排;具体分项规则需在该届平台核对。 + +依据:[2026 中国高校计算机大赛人工智能创意赛官方页面](https://developer.huawei.com/home/C4-AI)。 + +## 准备建议 + +从一个可验证的应用问题出发,准备原型、实验结果与演示。确认所用平台、模型和素材满足所选方向要求。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/ccf-open.md b/docs/events/ccf-open.md new file mode 100644 index 0000000..0770548 --- /dev/null +++ b/docs/events/ccf-open.md @@ -0,0 +1,62 @@ +--- +title: 'CCF开源创新大赛' +description: '通过项目贡献、任务挑战或案例教学参与开源,把成果放到真实社区中检验。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': 'CCF开源创新大赛官方入口', 'url': 'https://www.gitlink.org.cn/competitions/2026' }, + { + 'name': 'CCF 第八届开源创新大赛通知', + 'url': 'https://www.ccf.org.cn/Chapters/DC/ODC/wyhdt/2026-03-23/865096.shtml', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['CCF开源大赛', 'CCF ODC'], + 'topic': '开源实践', + 'eyebrow': 'CCF 开源创新大赛', + 'cover': 'code', + 'tags': ['开源贡献', '软件工程'], + 'beginner': false, + 'schedule': '2026 第八届 · 后续安排查官方平台', + 'official': 'https://www.gitlink.org.cn/competitions/2026', + 'order': 17, + 'checked': '2026-09-12', + } +--- + + + +# CCF开源创新大赛 + +通过项目贡献、任务挑战或案例教学参与开源,把成果放到真实社区中检验。 + + + +## 名称与收录范围 + +中国计算机学会发布的第八届通知使用“CCF开源创新大赛”,包含开源项目贡献、开源任务挑战、开源案例教学方向。该赛事与 GitLink“确实开源”编程夏令营不同,分别收录。 + +依据:[CCF 第八届开源创新大赛通知](https://www.ccf.org.cn/Chapters/DC/ODC/wyhdt/2026-03-23/865096.shtml)。 + +## 准备建议 + +先挑选与现有技术栈匹配的赛题,阅读交付与评审标准。使用公开仓库记录贡献过程,并确认代码和材料的许可。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/ccpc.md b/docs/events/ccpc.md new file mode 100644 index 0000000..9a43373 --- /dev/null +++ b/docs/events/ccpc.md @@ -0,0 +1,59 @@ +--- +title: '中国大学生程序设计竞赛(CCPC)' +description: '面向大学生的程序设计赛事,适合持续进行算法训练与团队配合练习。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '中国大学生程序设计竞赛(CCPC)官方入口', 'url': 'https://ccpc.io/' }, + { 'name': 'CCPC 官方报名与赛事平台', 'url': 'https://signup.ccpc.io/' }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['CCPC', 'China Collegiate Programming Contest'], + 'topic': '程序设计', + 'eyebrow': 'CCPC', + 'cover': 'blue', + 'tags': ['算法', '团队竞赛'], + 'beginner': false, + 'schedule': '常设入口 · 各届与赛项分别安排', + 'official': 'https://ccpc.io/', + 'order': 13, + 'checked': '2026-09-12', + } +--- + + + +# 中国大学生程序设计竞赛(CCPC) + +面向大学生的程序设计赛事,适合持续进行算法训练与团队配合练习。 + + + +## 名称与收录范围 + +官方名称为中国大学生程序设计竞赛,英文为 China Collegiate Programming Contest。CCPC 与 ICPC 是不同赛事;网络赛、分站赛与总决赛属于赛事体系中的不同阶段或赛站,不在目录中重复计数。 + +依据:[CCPC 官方报名与赛事平台](https://signup.ccpc.io/)。 + +## 准备建议 + +根据当届赛站要求核对资格与名额,使用公开题目开展限时训练。校内选拔、名额和认定只以本校通知为准。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/challenge-business.md b/docs/events/challenge-business.md new file mode 100644 index 0000000..2e71a75 --- /dev/null +++ b/docs/events/challenge-business.md @@ -0,0 +1,59 @@ +--- +title: '“挑战杯”中国大学生创业计划竞赛' +description: '围绕真实需求和创业方案,检验用户价值、实施条件与团队计划。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '“挑战杯”中国大学生创业计划竞赛官方入口', 'url': 'https://www.tiaozhanbei.net/' }, + { 'name': '挑战杯官方历史站与 2026 通知入口', 'url': 'https://old.tiaozhanbei.net/' }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['挑战杯', '小挑', '创业计划竞赛'], + 'topic': '创新创业', + 'eyebrow': '挑战杯 · 创业计划', + 'cover': 'code', + 'tags': ['创业计划', '需求调研'], + 'beginner': false, + 'schedule': '2026 第十五届 · 校内推荐另查', + 'official': 'https://www.tiaozhanbei.net/', + 'order': 32, + 'checked': '2026-09-12', + } +--- + + + +# “挑战杯”中国大学生创业计划竞赛 + +围绕真实需求和创业方案,检验用户价值、实施条件与团队计划。 + + + +## 名称与收录范围 + +官网将创业计划竞赛与课外学术科技作品竞赛分列,常用简称分别为“小挑”与“大挑”。2026 年官网通知对应第十五届创业计划竞赛;本目录使用不含当届冠名的稳定名称。 + +依据:[挑战杯官方历史站与 2026 通知入口](https://old.tiaozhanbei.net/)。 + +## 准备建议 + +开展可核验的需求调研,说明产品、实施路径与团队分工。不要把未经验证的收入或用户规模当作既有成果。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/challenge-science.md b/docs/events/challenge-science.md new file mode 100644 index 0000000..e786b47 --- /dev/null +++ b/docs/events/challenge-science.md @@ -0,0 +1,61 @@ +--- +title: '“挑战杯”全国大学生课外学术科技作品竞赛' +description: '围绕研究问题与科技作品,组织调研、实验验证和成果展示。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { + 'name': '“挑战杯”全国大学生课外学术科技作品竞赛官方入口', + 'url': 'https://www.tiaozhanbei.net/', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['挑战杯', '大挑', '科技作品竞赛'], + 'topic': '创新创业', + 'eyebrow': '挑战杯 · 科技作品', + 'cover': 'code', + 'tags': ['科研实践', '科技作品'], + 'beginner': false, + 'schedule': '与创业计划竞赛分届举办', + 'official': 'https://www.tiaozhanbei.net/', + 'order': 31, + 'checked': '2026-09-12', + } +--- + + + +# “挑战杯”全国大学生课外学术科技作品竞赛 + +围绕研究问题与科技作品,组织调研、实验验证和成果展示。 + + + +## 名称与收录范围 + +挑战杯官网分别列出课外学术科技作品竞赛与创业计划竞赛,两类赛事交替举办。通常所说“大挑”指科技作品竞赛,不应把“小挑”的届次和通知用于本赛。 + +依据:[挑战杯官网赛事介绍](https://www.tiaozhanbei.net/)。 + +## 准备建议 + +先明确研究问题和已有工作,再持续积累实验、调研与原创证据。具体申报类别、资格与校内推荐需查对应通知。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/ciscn.md b/docs/events/ciscn.md new file mode 100644 index 0000000..186500c --- /dev/null +++ b/docs/events/ciscn.md @@ -0,0 +1,59 @@ +--- +title: '全国大学生信息安全竞赛' +description: '了解信息安全作品设计与创新实践能力两类赛道,培养安全分析与工程能力。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '全国大学生信息安全竞赛官方入口', 'url': 'https://www.ciscn.cn/' }, + { 'name': '竞赛官方公告列表', 'url': 'https://www.ciscn.cn/announcement' }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['CISCN', '信息安全国赛', '作品赛', '创新实践能力赛'], + 'topic': '网络安全', + 'eyebrow': '信息安全国赛', + 'cover': 'code', + 'tags': ['CTF', '安全作品'], + 'beginner': false, + 'schedule': '2026 第十九届 · 分赛道查看', + 'official': 'https://www.ciscn.cn/', + 'order': 18, + 'checked': '2026-09-12', + } +--- + + + +# 全国大学生信息安全竞赛 + +了解信息安全作品设计与创新实践能力两类赛道,培养安全分析与工程能力。 + + + +## 名称与收录范围 + +2026 年官网发布第十九届竞赛公告,并分别列出作品赛和创新实践能力赛通知。两条赛道的日程与形式不能互相替代;某一赛道的联合赛事名称也不能用于重命名整个竞赛。 + +依据:[竞赛官方公告列表](https://www.ciscn.cn/announcement)。 + +## 准备建议 + +作品方向先明确安全问题、实现方案与验证方法;实践方向使用授权靶场训练。参赛资格和评测要求分别查阅所选赛道公告。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/computer-design.md b/docs/events/computer-design.md new file mode 100644 index 0000000..3f91436 --- /dev/null +++ b/docs/events/computer-design.md @@ -0,0 +1,62 @@ +--- +title: '中国大学生计算机设计大赛' +description: '围绕软件应用、人工智能、物联网和数字媒体等方向,完成可展示的计算机作品。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '中国大学生计算机设计大赛官方入口', 'url': 'https://jsjds.blcu.edu.cn/' }, + { + 'name': '中国大学生计算机设计大赛:大赛简介', + 'url': 'https://jsjds.blcu.edu.cn/gyds1/dsjj.htm', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['4C', '计算机设计大赛', 'Chinese Collegiate Computing Competition'], + 'topic': '综合计算机', + 'eyebrow': '计算机设计大赛', + 'cover': 'code', + 'tags': ['软件作品', '数字媒体', '人工智能'], + 'beginner': true, + 'schedule': '2026 第十九届 · 当届分类查官网', + 'official': 'https://jsjds.blcu.edu.cn/', + 'order': 19, + 'checked': '2026-09-12', + } +--- + + + +# 中国大学生计算机设计大赛 + +围绕软件应用、人工智能、物联网和数字媒体等方向,完成可展示的计算机作品。 + + + +## 名称与收录范围 + +官网名称为“中国大学生计算机设计大赛”,常用缩写 4C。它与“中国高校计算机大赛”(含天梯赛、人工智能创意赛等)是不同赛事。本页不把二者混称为“计算机大赛”。 + +依据:[中国大学生计算机设计大赛:大赛简介](https://jsjds.blcu.edu.cn/gyds1/dsjj.htm)。 + +## 准备建议 + +先确定当届作品类别,围绕真实问题完成原型、说明文档和演示。参赛作品需符合相应原创性、素材与提交规则。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/contribute.md b/docs/events/contribute.md new file mode 100644 index 0000000..b3e5fd8 --- /dev/null +++ b/docs/events/contribute.md @@ -0,0 +1,40 @@ +--- +title: 推荐活动与补充经验 +description: 为活动与竞赛中心推荐公开活动、修正时间或分享参与经验。 +category: competitions +audience: + - 贡献者 +content_type: verified +status: active +maintainers: + - SCSWiki 维护组 +sources: + - name: SCSWiki 项目 + url: https://github.com/CWNU-Open-Source-Community/SCSWiki +--- + + + +# 推荐活动与补充经验 + +[← 返回活动与竞赛中心](/events/) + +一个官网链接、一份清晰的准备指南,或一次有帮助的复盘,都能为下一位参与者节省时间。 + +## 推荐一个活动 + +[前往 GitHub 提交活动建议](https://github.com/CWNU-Open-Source-Community/SCSWiki/issues/new?template=event.yml)。需要登录 GitHub,由维护者核验后收录。 + +请提供活动名称、官方链接、活动类型、面向对象,以及能核验时间的具体通知。未找到当届时间也可以推荐,明确写“待确认”即可。 + +## 修正过期信息 + +请写清本站页面地址、原来的信息、建议修改及最新公开来源。日期尽量包含年份、时区与具体时刻,避免只写“月底截止”。 + +## 分享参与经验 + +可以分享准备方法、工具使用、协作过程和复盘。注明参加的年份与届次,将个人经验与官方规则分开;不提供未公开题目、他人隐私或未经授权的材料。 + +## 用 Pull Request 直接贡献 + +熟悉 Git 的同学可以按[如何贡献](/about/contribute)修改活动详情页。列表会读取详情页中的活动字段生成卡片,无需另外维护一份列表。维护字段的说明见仓库 CONTRIBUTING.md 中的“活动与竞赛中心”。 diff --git a/docs/events/craic.md b/docs/events/craic.md new file mode 100644 index 0000000..9ae8920 --- /dev/null +++ b/docs/events/craic.md @@ -0,0 +1,55 @@ +--- +title: '中国机器人及人工智能大赛' +description: '围绕机器人与人工智能开展工程实践,按任务、平台和设备条件选择赛项。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: [{ 'name': '中国机器人及人工智能大赛官方入口', 'url': 'https://www.caairobot.com/' }] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['CRAIC', '机器人及人工智能大赛'], + 'topic': '机器人与硬件', + 'eyebrow': '机器人及人工智能大赛', + 'cover': 'ladder', + 'tags': ['机器人', '人工智能'], + 'beginner': false, + 'schedule': '2026 第二十八届 · 分赛项查看', + 'official': 'https://www.caairobot.com/', + 'order': 23, + 'checked': '2026-09-12', + } +--- + + + +# 中国机器人及人工智能大赛 + +围绕机器人与人工智能开展工程实践,按任务、平台和设备条件选择赛项。 + + + +## 名称与收录范围 + +官网使用“中国机器人及人工智能大赛”,2026 年为第二十八届。不同赛项和决赛场次有独立安排,不能把某地决赛日期推广为整个大赛的统一时间。 + +依据:[中国机器人及人工智能大赛官网](https://www.caairobot.com/)。 + +## 准备建议 + +先核实赛项设备、软件平台和赛制,评估现有实验条件。尽早将感知、控制与机械或仿真模块分工落实。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/cumcm.md b/docs/events/cumcm.md new file mode 100644 index 0000000..387ef17 --- /dev/null +++ b/docs/events/cumcm.md @@ -0,0 +1,62 @@ +--- +title: '全国大学生数学建模竞赛' +description: '把现实问题转化为数学模型,结合编程计算、结果验证与论文表达完成团队作品。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '全国大学生数学建模竞赛官方入口', 'url': 'https://www.mcm.edu.cn/' }, + { + 'name': '2026 高教社杯全国大学生数学建模竞赛通知', + 'url': 'https://www.mcm.edu.cn/html_cn/node/d6fd7a0ee8f3a3d525e30af1c365fcec.html', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['CUMCM', '高教社杯', '数学建模国赛', '2026高教社杯全国大学生数学建模竞赛'], + 'topic': '数学建模', + 'eyebrow': '全国大学生数学建模竞赛', + 'cover': 'code', + 'tags': ['数学建模', 'Python', '论文表达'], + 'beginner': false, + 'schedule': '2026 通知已发布 · 完整赛程见官网', + 'official': 'https://www.mcm.edu.cn/', + 'order': 22, + 'checked': '2026-09-12', + } +--- + + + +# 全国大学生数学建模竞赛 + +把现实问题转化为数学模型,结合编程计算、结果验证与论文表达完成团队作品。 + + + +## 名称与收录范围 + +2026 年组委会通知标题使用“2026高教社杯全国大学生数学建模竞赛”。“高教社杯”为该届标题中的冠名,本目录保留稳定赛事名称。国内赛与美国大学生数学建模竞赛不是同一赛事。 + +依据:[2026 高教社杯全国大学生数学建模竞赛通知](https://www.mcm.edu.cn/html_cn/node/d6fd7a0ee8f3a3d525e30af1c365fcec.html)。 + +## 准备建议 + +练习建模、编程和写作分工,重视模型假设、检验与引用。参赛前阅读当届关于 AI 工具和学术规范的专门规定。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/electronic.md b/docs/events/electronic.md new file mode 100644 index 0000000..f6dc444 --- /dev/null +++ b/docs/events/electronic.md @@ -0,0 +1,55 @@ +--- +title: '全国大学生电子设计竞赛' +description: '围绕电子系统设计、嵌入式开发与测试,完成软硬件结合的工程作品。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: [{ 'name': '全国大学生电子设计竞赛官方入口', 'url': 'https://nuedc.xjtu.edu.cn/' }] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['NUEDC', '电赛'], + 'topic': '机器人与硬件', + 'eyebrow': '全国大学生电子设计竞赛', + 'cover': 'ladder', + 'tags': ['嵌入式', '电路设计'], + 'beginner': false, + 'schedule': '2026 专题赛 · 分项查看', + 'official': 'https://nuedc.xjtu.edu.cn/', + 'order': 34, + 'checked': '2026-09-12', + } +--- + + + +# 全国大学生电子设计竞赛 + +围绕电子系统设计、嵌入式开发与测试,完成软硬件结合的工程作品。 + + + +## 名称与收录范围 + +官网名称为“全国大学生电子设计竞赛”,缩写 NUEDC。2026 年页面中的专题竞赛与往届全国赛的安排需要分别核对,不能把某个专题赛时间写成全部赛事的时间。 + +依据:[全国大学生电子设计竞赛组委会官网](https://nuedc.xjtu.edu.cn/)。 + +## 准备建议 + +从电路、单片机、嵌入式与测量基础入手,安排模块测试与联调。设备、器件和赛题限制以具体竞赛要求为准。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/glcc.md b/docs/events/glcc.md new file mode 100644 index 0000000..b672491 --- /dev/null +++ b/docs/events/glcc.md @@ -0,0 +1,62 @@ +--- +title: 'GitLink“确实开源”编程夏令营' +description: '在导师与社区支持下参与真实开源项目,通过持续贡献完成开发实践。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': 'GitLink“确实开源”编程夏令营官方入口', 'url': 'https://www.gitlink.org.cn/glcc' }, + { + 'name': 'CCF:2025 GitLink“确实开源”编程夏令营', + 'url': 'https://www.ccf.org.cn/Chapters/DC/ODC/wyhdt/2025-06-30/846040.shtml', + }, + ] +event: + { + 'kind': '开源活动', + 'scope': 'series', + 'aliases': ['GLCC', '确实开源', 'GitLink'], + 'topic': '开源实践', + 'eyebrow': 'GLCC', + 'cover': 'summer', + 'tags': ['开源开发', '导师指导'], + 'beginner': false, + 'schedule': '已核验 2025 通知 · 新届招募另查', + 'official': 'https://www.gitlink.org.cn/glcc', + 'order': 27, + 'checked': '2026-09-12', + } +--- + + + +# GitLink“确实开源”编程夏令营 + +在导师与社区支持下参与真实开源项目,通过持续贡献完成开发实践。 + + + +## 名称与收录范围 + +CCF 2025 年通知使用“GitLink‘确实开源’编程夏令营”,缩写 GLCC。本次核实到的具体招募通知属于 2025 年,不能据此宣称 2026 年正在招募。它与 CCF开源创新大赛分别收录。 + +依据:[CCF:2025 GitLink“确实开源”编程夏令营](https://www.ccf.org.cn/Chapters/DC/ODC/wyhdt/2025-06-30/846040.shtml)。 + +## 准备建议 + +先在项目列表中筛选熟悉的技术,阅读项目背景与预期交付,再尝试一个小任务。申请前确认当届资格与可投入周期。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/gplt.md b/docs/events/gplt.md new file mode 100644 index 0000000..4766bf2 --- /dev/null +++ b/docs/events/gplt.md @@ -0,0 +1,62 @@ +--- +title: '中国高校计算机大赛—团体程序设计天梯赛' +description: '以团队形式参与分梯级程序设计挑战,兼顾个人编程基础和队伍整体实力。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '中国高校计算机大赛—团体程序设计天梯赛官方入口', 'url': 'https://gplt.patest.cn/' }, + { + 'name': '第十一届赛前准备会通知(组委会 PDF)', + 'url': 'https://gpltprod.ptausercontent.com/GPLT2b969d4e27f7a51035875be39884cc79.pdf', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['GPLT', '天梯赛', '团体程序设计天梯赛'], + 'topic': '程序设计', + 'eyebrow': '团体程序设计天梯赛', + 'cover': 'blue', + 'tags': ['程序设计', '团队协作'], + 'beginner': true, + 'schedule': '常设入口 · 各届与赛项分别安排', + 'official': 'https://gplt.patest.cn/', + 'order': 6, + 'checked': '2026-09-12', + } +--- + + + +# 中国高校计算机大赛—团体程序设计天梯赛 + +以团队形式参与分梯级程序设计挑战,兼顾个人编程基础和队伍整体实力。 + + + +## 名称与收录范围 + +组委会通知中的全称为“中国高校计算机大赛-团体程序设计天梯赛”。本页使用中文破折号统一排版;GPLT、天梯赛为简称。它属于中国高校计算机大赛系列,不能与中国大学生计算机设计大赛合并。 + +依据:[第十一届赛前准备会通知(组委会 PDF)](https://gpltprod.ptausercontent.com/GPLT2b969d4e27f7a51035875be39884cc79.pdf)。 + +## 准备建议 + +从基础题开始限时练习,再逐步补充数据结构和算法。参赛队伍的组织、选拔和报名方式需查看本校正式通知。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/gsoc-2026.md b/docs/events/gsoc-2026.md new file mode 100644 index 0000000..3fb99dc --- /dev/null +++ b/docs/events/gsoc-2026.md @@ -0,0 +1,74 @@ +--- +title: 'Google Summer of Code 2026' +description: '在导师指导下参与开源项目,与全球社区协作,积累真实开发经验。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': 'Google Summer of Code 官网', 'url': 'https://summerofcode.withgoogle.com/' }, + { + 'name': 'Google Summer of Code 2026 时间线', + 'url': 'https://developers.google.com/open-source/gsoc/timeline', + }, + ] +event: + { + 'kind': '开源活动', + 'eyebrow': 'Summer of Code', + 'cover': 'code', + 'tags': ['开源开发', '导师指导', '英语协作'], + 'beginner': false, + 'schedule': '2026 年度 · 含延长项目周期', + 'official': 'https://summerofcode.withgoogle.com/', + 'order': 3, + 'registrationOpen': '2026-03-16T18:00:00Z', + 'registrationClose': '2026-03-31T18:00:00Z', + 'start': '2026-05-25T00:00:00Z', + 'end': '2026-11-09T18:00:00Z', + 'checked': '2026-09-12', + 'aliases': ['GSoC', 'Google Summer of Code'], + 'topic': '开源实践', + 'scope': 'edition', + } +--- + + + +# Google Summer of Code 2026 + +在导师指导下参与开源项目,与全球社区协作,积累真实开发经验。 + + + +## 活动简介 + +Google Summer of Code(GSoC)是面向开源新贡献者的全球线上项目,参与者在导师指导下与开源组织共同开发。具体资格与项目要求请阅读官网规则。 + +## 2026 时间线 + +以下来自 [Google 官方时间线](https://developers.google.com/open-source/gsoc/timeline)。精确时刻以 UTC 表示,北京时间需加 8 小时。 + +| 阶段 | 官方时间 | +| ------------------------ | -------------------- | +| 贡献者开始申请 | 3 月 16 日 18:00 UTC | +| 贡献者申请截止 | 3 月 31 日 18:00 UTC | +| 正式编码开始 | 5 月 25 日 | +| 标准周期导师最终评估截止 | 8 月 31 日 18:00 UTC | +| 延长项目最终成果提交截止 | 11 月 2 日 18:00 UTC | +| 延长项目导师评估截止 | 11 月 9 日 18:00 UTC | + +本站状态按整个年度计划计算,包含延长项目及最终评估;显示“进行中”不表示仍可申请。个人项目安排可能不同。 + +## 准备建议 + +先选择感兴趣的组织,阅读项目文档、尝试运行代码,并尽早讨论项目想法。练习用清楚的文字描述问题与解决方案,比一次性提交庞大的提案更适合作为准备起点。 + +## 继续学习 + +- [Git 入门](/development/git-basics) +- [开发与工具](/development/) + +往届经验可以用于了解协作方式,但不能替代当届规则。 diff --git a/docs/events/hacktoberfest-2026.md b/docs/events/hacktoberfest-2026.md new file mode 100644 index 0000000..97c8831 --- /dev/null +++ b/docs/events/hacktoberfest-2026.md @@ -0,0 +1,61 @@ +--- +title: 'Hacktoberfest 2026' +description: '围绕开源 AI 动手学习,探索线上与线下社区活动,和其他开发者一起创造。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: [{ 'name': 'Hacktoberfest 2026 官网', 'url': 'https://hacktoberfest.com/' }] +event: + { + 'kind': '开源活动', + 'eyebrow': 'Hacktoberfest', + 'cover': 'fest', + 'tags': ['开源 AI', '社区活动', '动手实践'], + 'beginner': true, + 'schedule': '2026 年 10 月 · 各场次另行安排', + 'official': 'https://hacktoberfest.com/', + 'order': 4, + 'start': '2026-10-01T00:00:00Z', + 'end': '2026-11-01T00:00:00Z', + 'checked': '2026-09-12', + 'aliases': ['Hacktoberfest', 'AI Fests'], + 'topic': '开源实践', + 'scope': 'edition', + } +--- + + + +# Hacktoberfest 2026 + +围绕开源 AI 动手学习,探索线上与线下社区活动,和其他开发者一起创造。 + + + +## 今年的活动是什么 + +根据官网,Hacktoberfest 2026 由 MLH 与 DEV 运营,与 DigitalOcean 合作,转向围绕开源 AI 的线上和线下社区活动。主题包括动手构建、实验与学习。 + +**不要套用往年的 PR 数量规则。** 官网明确说明今年的活动形式已发生变化。 + +## 如何参与 + +1. 在官网通过 Find a Fest 查找活动。 +2. 查看具体场次的主题、形式、地点或线上参与方式。 +3. 以场次说明核实报名要求、容量和时区,再安排参与。 + +## 时间安排 + +官网列出的活动月份为 2026 年 10 月。本站用 UTC 月份边界展示整体活动季的“即将开始 / 进行中 / 已结束”,不是某个场次的报名或结束时间;具体以场次通知为准。 + +## 适合谁 + +对开源 AI 和动手实践感兴趣的同学。“新手友好”是本站对探索入口的建议,各场次仍可能有不同基础要求。 + +## 准备建议 + +- 阅读所选活动的准备清单,提前安装需要的工具。 +- 用[Git 入门](/development/git-basics)了解协作基础。 +- 记录成果与复盘,后续可以通过[贡献入口](/events/contribute)分享经验。 diff --git a/docs/events/icpc.md b/docs/events/icpc.md new file mode 100644 index 0000000..6e16472 --- /dev/null +++ b/docs/events/icpc.md @@ -0,0 +1,59 @@ +--- +title: '国际大学生程序设计竞赛(ICPC)' +description: '三人团队协作解决算法问题,沿区域赛等赛事体系逐级参与挑战。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '国际大学生程序设计竞赛(ICPC)官方入口', 'url': 'https://icpc.global/' }, + { 'name': 'ICPC 2026 World Finals:About', 'url': 'https://wf.icpc.global/2026/about/' }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['ICPC', 'ACM-ICPC', 'ACM', 'International Collegiate Programming Contest'], + 'topic': '程序设计', + 'eyebrow': 'ICPC', + 'cover': 'blue', + 'tags': ['算法', '团队竞赛'], + 'beginner': false, + 'schedule': '常设入口 · 各届与赛项分别安排', + 'official': 'https://icpc.global/', + 'order': 12, + 'checked': '2026-09-12', + } +--- + + + +# 国际大学生程序设计竞赛(ICPC) + +三人团队协作解决算法问题,沿区域赛等赛事体系逐级参与挑战。 + + + +## 名称与收录范围 + +ICPC 官方英文全称为 International Collegiate Programming Contest。其赛事体系包括地区及更高层级赛事,不能用世界总决赛日程代表所有区域赛。历史资料中的 ACM-ICPC 可用于检索,不作为当前名称。 + +依据:[ICPC 2026 World Finals:About](https://wf.icpc.global/2026/about/)。 + +## 准备建议 + +先建立算法和数据结构基础,再开展三人共用比赛资源的团队训练。查看拟参加赛站的资格规则及学校组队要求。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/index.md b/docs/events/index.md new file mode 100644 index 0000000..827150d --- /dev/null +++ b/docs/events/index.md @@ -0,0 +1,20 @@ +--- +layout: page +title: 活动与竞赛 +description: 发现开源活动、学科竞赛与 SCSWiki 社区共建,从第一次贡献开始实践。 +category: competitions +audience: + - 本科生 + - 开源贡献者 +content_type: verified +status: active +maintainers: + - SCSWiki 维护组 +sources: + - name: SCSWiki 项目 + url: https://github.com/CWNU-Open-Source-Community/SCSWiki +sidebar: false +outline: false +--- + + diff --git a/docs/events/innovation.md b/docs/events/innovation.md new file mode 100644 index 0000000..b74beee --- /dev/null +++ b/docs/events/innovation.md @@ -0,0 +1,62 @@ +--- +title: '中国国际大学生创新大赛' +description: '围绕创新项目开展实践与展示,按教育部当届通知选择适用赛道。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '中国国际大学生创新大赛官方入口', 'url': 'https://cy.ncss.cn/' }, + { + 'name': '教育部关于举办中国国际大学生创新大赛(2026)的通知', + 'url': 'https://hudong.moe.gov.cn/srcsite/A08/s5672/202607/t20260731_1445670.html', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['互联网+', '互联网加', '中国国际大学生创新大赛(2026)', '大学生创新创业大赛'], + 'topic': '创新创业', + 'eyebrow': '中国国际大学生创新大赛', + 'cover': 'code', + 'tags': ['创新项目', '团队实践'], + 'beginner': false, + 'schedule': '2026 全国报名至 9 月 25 日 12:00', + 'official': 'https://cy.ncss.cn/', + 'order': 35, + 'checked': '2026-09-12', + } +--- + + + +# 中国国际大学生创新大赛 + +围绕创新项目开展实践与展示,按教育部当届通知选择适用赛道。 + + + +## 名称与收录范围 + +教育部 2026 年通知使用“中国国际大学生创新大赛(2026)”。“互联网+”大学生创新创业大赛属于历史检索名称。通知所列国内参赛报名系统于 8 月 10 日开放,9 月 25 日 12:00 截止;校内推荐时间可能更早。 + +依据:[教育部关于举办中国国际大学生创新大赛(2026)的通知](https://hudong.moe.gov.cn/srcsite/A08/s5672/202607/t20260731_1445670.html)。 + +## 准备建议 + +先核对赛道、项目阶段和团队资格,准备可核实的项目材料。教育部全国截止时间不能替代本校申报与推荐截止时间。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/jittor.md b/docs/events/jittor.md new file mode 100644 index 0000000..5f450b4 --- /dev/null +++ b/docs/events/jittor.md @@ -0,0 +1,65 @@ +--- +title: '“计图”人工智能算法挑战赛' +description: '使用计图深度学习框架实践人工智能算法,关注官方热身任务与正式赛道。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'needs-review' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { + 'name': '“计图”人工智能算法挑战赛官方入口', + 'url': 'https://cg.cs.tsinghua.edu.cn/jittor/news/', + }, + { + 'name': '计图官方第五届赛事介绍(2025)', + 'url': 'https://cg.cs.tsinghua.edu.cn/jittor/news/2025-04-25-13-44-00-00-DiWuJieJittorTiaozhansai/', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['计图', 'Jittor', '计图人工智能挑战赛'], + 'topic': '人工智能与数据', + 'eyebrow': '计图人工智能算法挑战赛', + 'cover': 'fest', + 'tags': ['深度学习', 'Jittor'], + 'beginner': false, + 'schedule': '名称已核实 · 2026 规则待核验', + 'official': 'https://cg.cs.tsinghua.edu.cn/jittor/news/', + 'order': 36, + 'checked': '2026-09-12', + } +--- + + + +# “计图”人工智能算法挑战赛 + +使用计图深度学习框架实践人工智能算法,关注官方热身任务与正式赛道。 + + + +## 名称与收录范围 + +计图官方文章的完整名称为“‘计图’人工智能算法挑战赛”。检索结果可见第六届启动条目,但本次官网正文访问受限,尚未完成 2026 年规则核验。2025 年官方文章仅用于核实名称与框架方向,不把旧届任务和报名链接当作当届安排。 + +依据:[计图官方第五届赛事介绍(2025)](https://cg.cs.tsinghua.edu.cn/jittor/news/2025-04-25-13-44-00-00-DiWuJieJittorTiaozhansai/)。 + +## 准备建议 + +先学习计图框架并运行公开示例。准备参赛前,必须找到当届正式公告,确认热身任务、数据集、评测和报名入口。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/lanqiao.md b/docs/events/lanqiao.md new file mode 100644 index 0000000..4e334f6 --- /dev/null +++ b/docs/events/lanqiao.md @@ -0,0 +1,62 @@ +--- +title: '蓝桥杯全国大学生软件和信息技术大赛' +description: '从程序设计到软件与电子实践,按当届科目和组别选择适合自己的赛道。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '蓝桥杯全国大学生软件和信息技术大赛官方入口', 'url': 'https://dasai.lanqiao.cn/' }, + { + 'name': '第十七届软件、电子赛报名指南(官方 PDF)', + 'url': 'https://x-static.lanqiao.cn/upload/202511/courseimg/2a04ace9-a1b4-4260-8973-2ab331db7c0e.pdf', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['蓝桥杯大赛', '蓝桥杯全国软件和信息技术专业人才大赛'], + 'topic': '程序设计', + 'eyebrow': '蓝桥杯', + 'cover': 'blue', + 'tags': ['程序设计', '软件开发'], + 'beginner': true, + 'schedule': '常设入口 · 当前届次请查官网', + 'official': 'https://dasai.lanqiao.cn/', + 'order': 5, + 'checked': '2026-09-12', + } +--- + + + +# 蓝桥杯全国大学生软件和信息技术大赛 + +从程序设计到软件与电子实践,按当届科目和组别选择适合自己的赛道。 + + + +## 名称与收录范围 + +第十七届官方指南使用“蓝桥杯全国大学生软件和信息技术大赛”。旧届常见的“全国软件和信息技术专业人才大赛”保留为历史检索词,不作为本页现行标题。该指南仅覆盖软件、电子赛,不能用来推断其他赛道或第十八届的安排。 + +依据:[第十七届软件、电子赛报名指南(官方 PDF)](https://x-static.lanqiao.cn/upload/202511/courseimg/2a04ace9-a1b4-4260-8973-2ab331db7c0e.pdf)。 + +## 准备建议 + +先核对语言、考试环境和组别,再按大纲练习。不要把不同赛道的报名、费用和省赛安排混在一起。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/lfx.md b/docs/events/lfx.md new file mode 100644 index 0000000..d4abae8 --- /dev/null +++ b/docs/events/lfx.md @@ -0,0 +1,62 @@ +--- +title: 'LFX Mentorship' +description: '通过 Linux Foundation 生态中的导师项目,参与开源技术实践。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { + 'name': 'LFX Mentorship官方入口', + 'url': 'https://lfx.linuxfoundation.org/tools/mentorship/', + }, + { 'name': 'LFX Mentorship 项目平台', 'url': 'https://mentorship.lfx.dev/' }, + ] +event: + { + 'kind': '开源活动', + 'scope': 'series', + 'aliases': ['LFX', 'Linux Foundation Mentorship'], + 'topic': '开源实践', + 'eyebrow': 'LFX Mentorship', + 'cover': 'summer', + 'tags': ['开源开发', '导师指导', '英语协作'], + 'beginner': false, + 'schedule': '按项目与批次开放', + 'official': 'https://lfx.linuxfoundation.org/tools/mentorship/', + 'order': 28, + 'checked': '2026-09-12', + } +--- + + + +# LFX Mentorship + +通过 Linux Foundation 生态中的导师项目,参与开源技术实践。 + + + +## 名称与收录范围 + +LFX Mentorship 是 Linux Foundation 提供的开源导师计划工具与项目入口,不是统一赛制的竞赛。各项目的申请窗口、技术要求与投入安排分别发布。 + +依据:[LFX Mentorship 项目平台](https://mentorship.lfx.dev/)。 + +## 准备建议 + +根据技术方向查看项目和导师要求,先阅读社区贡献规范、运行项目并积累公开贡献记录,再准备申请材料。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/matibei.md b/docs/events/matibei.md new file mode 100644 index 0000000..b20fc7d --- /dev/null +++ b/docs/events/matibei.md @@ -0,0 +1,56 @@ +--- +title: '码蹄杯全国大学生程序设计大赛' +description: '结合官方历年题集练习程序设计,了解不同院校类型与赛道的参赛要求。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [{ 'name': '码蹄杯全国大学生程序设计大赛官方入口', 'url': 'https://www.matiji.net/exam/matibei' }] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['码蹄杯', 'MATIBEI'], + 'topic': '程序设计', + 'eyebrow': '码蹄杯', + 'cover': 'blue', + 'tags': ['程序设计', '公开题集'], + 'beginner': true, + 'schedule': '历年题集入口 · 报名另查当届通知', + 'official': 'https://www.matiji.net/exam/matibei', + 'order': 14, + 'checked': '2026-09-12', + } +--- + + + +# 码蹄杯全国大学生程序设计大赛 + +结合官方历年题集练习程序设计,了解不同院校类型与赛道的参赛要求。 + + + +## 名称与收录范围 + +官方题集页面使用“码蹄杯全国大学生程序设计大赛”。页面关于竞赛榜单的说明特别指向职业院校赛道,不能据此宣称本科赛道或本校具有相同认定。题集年份也不等于开放报名年份。 + +依据:[码蹄集官方历年题集与赛事简介](https://www.matiji.net/exam/matibei)。 + +## 准备建议 + +先用公开题集了解难度,再确认当届本科、职业院校等赛道的适用对象。公开题目适合训练,但不是报名入口。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/ncccu.md b/docs/events/ncccu.md new file mode 100644 index 0000000..3ad278c --- /dev/null +++ b/docs/events/ncccu.md @@ -0,0 +1,71 @@ +--- +title: '全国高校计算机能力挑战赛' +description: '覆盖程序设计、Office、大数据、人工智能和数字媒体,按具体赛项选择方向。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '全国高校计算机能力挑战赛官方入口', 'url': 'https://www.ncccu.org.cn/' }, + { + 'name': '2026 年第八届赛项规程', + 'url': 'https://www.ncccu.org.cn/index/Cms/content.html?id=373', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': + [ + '计挑赛', + 'NCCCU', + '程序设计挑战赛', + 'Office高级应用赛', + '大数据挑战赛', + '人工智能挑战赛', + '数字媒体创新设计赛', + ], + 'topic': '综合计算机', + 'eyebrow': '计挑赛', + 'cover': 'code', + 'tags': ['程序设计', '人工智能', '数字媒体'], + 'beginner': true, + 'schedule': '2026 第八届 · 各赛项分别安排', + 'official': 'https://www.ncccu.org.cn/', + 'order': 16, + 'checked': '2026-09-12', + } +--- + + + +# 全国高校计算机能力挑战赛 + +覆盖程序设计、Office、大数据、人工智能和数字媒体,按具体赛项选择方向。 + + + +## 名称与收录范围 + +2026 年官方入口列出五大赛项:程序设计挑战赛、Office 高级应用赛、大数据挑战赛、人工智能挑战赛、数字媒体创新设计赛。“程序设计挑战赛”是子赛项,不能当作整项赛事的全称。 + +依据:[2026 年第八届赛项规程](https://www.ncccu.org.cn/index/Cms/content.html?id=373)。 + +## 准备建议 + +先读所选赛项规程,再核对全国通知及适用赛区要求。不同赛项的考核形式、模拟赛和截止时间可能不同。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/os-design.md b/docs/events/os-design.md new file mode 100644 index 0000000..b4bbc9e --- /dev/null +++ b/docs/events/os-design.md @@ -0,0 +1,62 @@ +--- +title: '全国大学生计算机系统能力大赛—操作系统设计赛' +description: '通过内核功能与系统设计挑战,把操作系统课程知识转化为可运行的实现。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { + 'name': '全国大学生计算机系统能力大赛—操作系统设计赛官方入口', + 'url': 'https://os.xtnl.org.cn/', + }, + { 'name': '全国大学生计算机系统能力大赛官方入口', 'url': 'https://www.csc-he.cn/' }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['操作系统设计赛', 'OS大赛', 'OS'], + 'topic': '系统开发', + 'eyebrow': '操作系统设计赛', + 'cover': 'code', + 'tags': ['操作系统', '内核', 'RISC-V'], + 'beginner': false, + 'schedule': '2026 赛事入口 · 赛道时间分别查看', + 'official': 'https://os.xtnl.org.cn/', + 'order': 26, + 'checked': '2026-09-12', + } +--- + + + +# 全国大学生计算机系统能力大赛—操作系统设计赛 + +通过内核功能与系统设计挑战,把操作系统课程知识转化为可运行的实现。 + + + +## 名称与收录范围 + +赛事官网使用“全国大学生计算机系统能力大赛—操作系统设计赛”。它是计算机系统能力大赛的分赛项,本目录不再另列同一个上级赛事来增加数量。 + +依据:[全国大学生计算机系统能力大赛官方入口](https://www.csc-he.cn/)。 + +## 准备建议 + +准备 Linux、C 或 Rust 与操作系统基础,先运行官方框架和样例。功能挑战、内核实现等具体任务以当届赛题为准。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/oscamp.md b/docs/events/oscamp.md new file mode 100644 index 0000000..cca7848 --- /dev/null +++ b/docs/events/oscamp.md @@ -0,0 +1,59 @@ +--- +title: '开源操作系统训练营' +description: '从 Rust 与操作系统基础出发,通过实验逐步参与 rCore 等开源系统实践。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '开源操作系统训练营官方入口', 'url': 'https://opencamp.cn/os2edu/camp/2026spring' }, + { 'name': 'LearningOS 开源学习社区', 'url': 'https://github.com/learningos' }, + ] +event: + { + 'kind': '开源活动', + 'scope': 'series', + 'aliases': ['rCore', 'OSCamp', '开源训练营'], + 'topic': '系统开发', + 'eyebrow': '开源操作系统训练营', + 'cover': 'summer', + 'tags': ['Rust', '操作系统', 'RISC-V'], + 'beginner': true, + 'schedule': '集中授课已结束 · 回放学习见官网', + 'official': 'https://opencamp.cn/os2edu/camp/2026spring', + 'order': 30, + 'checked': '2026-09-12', + } +--- + + + +# 开源操作系统训练营 + +从 Rust 与操作系统基础出发,通过实验逐步参与 rCore 等开源系统实践。 + + + +## 名称与收录范围 + +2026 春夏季官方页面列出 3 月 1 日至 6 月 21 日的集中学习周期,同时明确全年可报名并使用回放学习。集中授课结束不等于学习资料关闭,但也不代表仍有同期直播与实时答疑。 + +依据:[LearningOS 开源学习社区](https://github.com/learningos)。 + +## 准备建议 + +先完成 Rust、Linux 与操作系统导学内容,再尝试基础实验。按官方阶段任务推进,记录可复现的实验环境与问题。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/ospp.md b/docs/events/ospp.md new file mode 100644 index 0000000..ff5bbe8 --- /dev/null +++ b/docs/events/ospp.md @@ -0,0 +1,62 @@ +--- +title: '点亮计划-开源之夏' +description: '围绕 RISC-V 基础软件生态参与开源项目,按项目节奏开展持续开发。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '点亮计划-开源之夏官方入口', 'url': 'https://summer.ospp.ac.cn/' }, + { + 'name': '点亮计划-开源之夏 2026 官方 FAQ', + 'url': 'https://docs2026.summer.ospp.ac.cn/help/FAQ', + }, + ] +event: + { + 'kind': '开源活动', + 'scope': 'series', + 'aliases': ['OSPP', '开源之夏', '点亮计划'], + 'topic': '开源实践', + 'eyebrow': '开源之夏 OSPP', + 'cover': 'summer', + 'tags': ['RISC-V', '基础软件', '开源项目'], + 'beginner': false, + 'schedule': '2026 滚动开放 · 按项目安排', + 'official': 'https://summer.ospp.ac.cn/', + 'order': 2, + 'checked': '2026-09-12', + } +--- + + + +# 点亮计划-开源之夏 + +围绕 RISC-V 基础软件生态参与开源项目,按项目节奏开展持续开发。 + + + +## 名称与收录范围 + +2026 年官方名称为“点亮计划-开源之夏”,聚焦 RISC-V 生态基础软件。FAQ 明确项目与开发阶段滚动开放,并提供经典模式与学生领航模式,不再沿用统一暑期时间表。学生须年满 18 周岁,且开发期间保持符合要求的在籍身份。 + +依据:[点亮计划-开源之夏 2026 官方 FAQ](https://docs2026.summer.ospp.ac.cn/help/FAQ)。 + +## 准备建议 + +先选择匹配自身能力的项目,阅读学生指南与项目交付标准,再尝试运行代码。滚动开放不代表任意项目随时有名额,申请窗口需逐项查看。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/outreachy.md b/docs/events/outreachy.md new file mode 100644 index 0000000..61365cb --- /dev/null +++ b/docs/events/outreachy.md @@ -0,0 +1,55 @@ +--- +title: 'Outreachy' +description: '面向符合资格的申请者提供远程开源实习,涵盖编程、文档、设计等贡献。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: [{ 'name': 'Outreachy官方入口', 'url': 'https://www.outreachy.org/' }] +event: + { + 'kind': '开源活动', + 'scope': 'series', + 'aliases': ['Outreachy Internship'], + 'topic': '开源实践', + 'eyebrow': 'Outreachy', + 'cover': 'summer', + 'tags': ['开源实习', '文档与设计', '英语协作'], + 'beginner': false, + 'schedule': '按轮次申请 · 需先核对资格', + 'official': 'https://www.outreachy.org/', + 'order': 29, + 'checked': '2026-09-12', + } +--- + + + +# Outreachy + +面向符合资格的申请者提供远程开源实习,涵盖编程、文档、设计等贡献。 + + + +## 名称与收录范围 + +Outreachy 面向在技术行业受到代表性不足或系统性偏见等影响、且符合其资格政策的人群。它是有资格审核的开源实习计划,不是所有在校生均可报名的比赛;不同轮次的申请、贡献期与实习期分开安排。 + +依据:[Outreachy 官方活动与资格入口](https://www.outreachy.org/)。 + +## 准备建议 + +先阅读当轮完整资格规则并核对可投入时间,再评估项目。通过初步资格审核后的贡献阶段,不等于已获实习录取。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/research.md b/docs/events/research.md new file mode 100644 index 0000000..79d6fa2 --- /dev/null +++ b/docs/events/research.md @@ -0,0 +1,146 @@ +--- +title: 活动与竞赛收录研究及名称核验 +description: 2026 年 9 月的赛事目录深度检索,说明 31 项活动的名称依据、层级差异、收录范围和待核验事项。 +category: competitions +audience: [本科生, 开源贡献者, 内容维护者] +content_type: verified +status: active +maintainers: [SCSWiki 维护组] +sources: + - name: 中国计算机学会 + url: https://www.ccf.org.cn/ + - name: 全国大学生数学建模竞赛 + url: https://www.mcm.edu.cn/ + - name: 点亮计划-开源之夏 2026 官方 FAQ + url: https://docs2026.summer.ospp.ac.cn/help/FAQ +--- + + + +# 活动与竞赛收录研究及名称核验 + +核验日期:**2026 年 9 月 12 日**。本次将目录从 6 项扩展为 **31 项:23 项学科竞赛、7 项开源活动、1 项社区共建**。覆盖程序设计、软件开发、综合计算机、人工智能与数据、网络安全、系统开发、数学建模、机器人与硬件、创新创业、开源实践。 + +这是一份面向计算机学院学生的机会目录,不是全国赛事全集,也不是学校认可的竞赛名单。收录表示找到了可追溯的名称与活动依据,不表示正在报名、学校组织参赛或已获学校认定。[返回活动目录](/events/)。 + +## 检索方法与证据标准 + +本次按“赛事全称/常用缩写 → 主办学会或组织 → 官方赛规与项目指南 → 当届通知 → 冲突核对”逐项检索。优先采用主办方、赛事组委会、官方项目社区及教育部资料;官网正文访问不稳定时,明确区分检索摘要、历届材料与高校转载的证据作用。 + +每项只收录一个稳定入口,避免通过重复列举母赛事、子赛项、校赛或不同届次增加数量。图文参考页仅用于界面和发现线索,不作为名称、赛事级别或赛程的事实依据。没有搬用宣传海报中的“国家级”标签。 + +以下几类信息单独处理: + +- **名称已核验,当前届次未核验**:保留常设入口,状态为“查看当届通知”,不猜测报名时间。 +- **具体年度活动**:如 GSoC 2026、Hacktoberfest 2026,按官方已核验时间线展示;详情说明适用阶段。 +- **官网内容受限或资料不足**:明确标注待核验,列出目前能支持与不能支持的结论。 +- **高校转载**:仅作赛事名称等公开信息的交叉证据,不照搬该校报名、加分、推荐名额或联系方式。 +- **日期冲突**:优先采用同一事项更新的官方通知;不同赛道、地区或阶段的日期不互相覆盖。仅给出日期而无时刻时,不补写精确截止时刻。 + +## 关键名称修正与容易混淆的关系 + +| 对象 | 本次处理 | 依据 | +| -------------- | ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 蓝桥杯 | 使用第十七届指南中的“蓝桥杯全国大学生软件和信息技术大赛”;旧名“全国软件和信息技术专业人才大赛”仅保留为历史检索词 | [官方第十七届指南](https://x-static.lanqiao.cn/upload/202511/courseimg/2a04ace9-a1b4-4260-8973-2ab331db7c0e.pdf) | +| 天梯赛 | 补全“中国高校计算机大赛—团体程序设计天梯赛”,保留 GPLT、天梯赛简称 | [组委会通知](https://gpltprod.ptausercontent.com/GPLT2b969d4e27f7a51035875be39884cc79.pdf) | +| 计挑赛 | 全称“全国高校计算机能力挑战赛”;程序设计挑战赛是其中的赛项 | [2026 赛项规程](https://www.ncccu.org.cn/index/Cms/content.html?id=373) | +| 计算机设计大赛 | “中国大学生计算机设计大赛”(4C)与“中国高校计算机大赛”分别处理 | [4C 大赛简介](https://jsjds.blcu.edu.cn/gyds1/dsjj.htm)、[人工智能创意赛官方页](https://developer.huawei.com/home/C4-AI) | +| GLCC | 使用 GitLink“确实开源”编程夏令营;与 CCF开源创新大赛分别收录 | [CCF 的 GLCC 通知](https://www.ccf.org.cn/Chapters/DC/ODC/wyhdt/2025-06-30/846040.shtml)、[CCF 开源创新大赛通知](https://www.ccf.org.cn/Chapters/DC/ODC/wyhdt/2026-03-23/865096.shtml) | +| 计图 | 全称补上“算法”,写作“‘计图’人工智能算法挑战赛”;2026 规则仍待核验 | [计图官方历届介绍](https://cg.cs.tsinghua.edu.cn/jittor/news/2025-04-25-13-44-00-00-DiWuJieJittorTiaozhansai/) | +| 挑战杯 | 科技作品竞赛与创业计划竞赛各收录一次;大挑、小挑不是同一赛事的随意简称 | [挑战杯官网](https://www.tiaozhanbei.net/) | +| 创新大赛 | 使用“中国国际大学生创新大赛”;“互联网+”作为历史检索词 | [教育部 2026 通知](https://hudong.moe.gov.cn/srcsite/A08/s5672/202607/t20260731_1445670.html) | +| 码蹄杯 | 使用“码蹄杯全国大学生程序设计大赛”;不把职业院校赛道的榜单说明推广到本科赛道 | [官方题集及简介](https://www.matiji.net/exam/matibei) | +| ICPC | 当前英文全称为 International Collegiate Programming Contest;ACM-ICPC 只用于历史检索 | [ICPC 官方介绍](https://wf.icpc.global/2026/about/) | + +标点统一使用中文引号和破折号,不改变专有名称。年份、届次和冠名只在有相应证据的当届说明中出现,常设入口不把所有比赛一律加上“2026”。 + +## 本次收录与证据目录 + +“当届入口”不等于完整赛程已核实;下列来源的适用范围详见各活动页。官网按钮用于导航,核验资料链接用于追溯具体结论。 + +| 活动与详情 | 方向 | 核验资料 | 适用范围 | +| ------------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | +| [蓝桥杯全国大学生软件和信息技术大赛](/events/lanqiao) | 程序设计 | [第十七届软件、电子赛报名指南(官方 PDF)](https://x-static.lanqiao.cn/upload/202511/courseimg/2a04ace9-a1b4-4260-8973-2ab331db7c0e.pdf) | 常设入口 · 当前届次请查官网 | +| [中国高校计算机大赛—团体程序设计天梯赛](/events/gplt) | 程序设计 | [第十一届赛前准备会通知(组委会 PDF)](https://gpltprod.ptausercontent.com/GPLT2b969d4e27f7a51035875be39884cc79.pdf) | 名称与常设入口;各届规则另查 | +| [国际大学生程序设计竞赛(ICPC)](/events/icpc) | 程序设计 | [ICPC 2026 World Finals:About](https://wf.icpc.global/2026/about/) | 名称与常设入口;各届规则另查 | +| [中国大学生程序设计竞赛(CCPC)](/events/ccpc) | 程序设计 | [CCPC 官方报名与赛事平台](https://signup.ccpc.io/) | 名称与常设入口;各届规则另查 | +| [码蹄杯全国大学生程序设计大赛](/events/matibei) | 程序设计 | [码蹄集官方历年题集与赛事简介](https://www.matiji.net/exam/matibei) | 历年题集入口 · 报名另查当届通知 | +| [百度之星程序设计大赛](/events/astar) | 程序设计 | [百度之星官方历届网站](https://astar2019.baidu.com/) | 常设入口 · 当届赛程另查 | +| [全国高校计算机能力挑战赛](/events/ncccu) | 综合计算机 | [2026 年第八届赛项规程](https://www.ncccu.org.cn/index/Cms/content.html?id=373) | 2026 第八届 · 各赛项分别安排 | +| [CCF开源创新大赛](/events/ccf-open) | 开源实践 | [CCF 第八届开源创新大赛通知](https://www.ccf.org.cn/Chapters/DC/ODC/wyhdt/2026-03-23/865096.shtml) | 2026 第八届 · 后续安排查官方平台 | +| [全国大学生信息安全竞赛](/events/ciscn) | 网络安全 | [竞赛官方公告列表](https://www.ciscn.cn/announcement) | 2026 第十九届 · 分赛道查看 | +| [中国大学生计算机设计大赛](/events/computer-design) | 综合计算机 | [中国大学生计算机设计大赛:大赛简介](https://jsjds.blcu.edu.cn/gyds1/dsjj.htm) | 2026 第十九届 · 当届分类查官网 | +| [“中国软件杯”大学生软件设计大赛](/events/software-cup) | 软件开发 | [第十五届赛事通知(西南交通大学公开转载)](https://jwc.swjtu.edu.cn/vatuu/WebAction?newsId=7B02FB387DCB9620&setAction=newsDetail&viewType=web) | 名称有依据;当前规则待复核 | +| [CCF大数据与计算智能大赛](/events/bdci) | 人工智能与数据 | [CCF 数据库专委会:2025 BDCI 总结](https://tc.ccf.org.cn/tcdb/news/2025-12-19/918824.shtml) | 已核验 2025 总结 · 新届通知另查 | +| [全国大学生数学建模竞赛](/events/cumcm) | 数学建模 | [2026 高教社杯全国大学生数学建模竞赛通知](https://www.mcm.edu.cn/html_cn/node/d6fd7a0ee8f3a3d525e30af1c365fcec.html) | 2026 通知已发布 · 完整赛程见官网 | +| [中国机器人及人工智能大赛](/events/craic) | 机器人与硬件 | [中国机器人及人工智能大赛官网](https://www.caairobot.com/) | 2026 第二十八届 · 分赛项查看 | +| [RoboMaster机甲大师高校系列赛](/events/robomaster) | 机器人与硬件 | [RoboMaster 官方赛事导航](https://www.robomaster.com/zh-CN) | 名称与常设入口;各届规则另查 | +| [中国高校计算机大赛—人工智能创意赛](/events/c4-ai) | 人工智能与数据 | [2026 中国高校计算机大赛人工智能创意赛官方页面](https://developer.huawei.com/home/C4-AI) | 2026 官方入口 · 分项安排查页面 | +| [全国大学生计算机系统能力大赛—操作系统设计赛](/events/os-design) | 系统开发 | [全国大学生计算机系统能力大赛官方入口](https://www.csc-he.cn/) | 2026 赛事入口 · 赛道时间分别查看 | +| [GitLink“确实开源”编程夏令营](/events/glcc) | 开源实践 | [CCF:2025 GitLink“确实开源”编程夏令营](https://www.ccf.org.cn/Chapters/DC/ODC/wyhdt/2025-06-30/846040.shtml) | 已核验 2025 通知 · 新届招募另查 | +| [LFX Mentorship](/events/lfx) | 开源实践 | [LFX Mentorship 项目平台](https://mentorship.lfx.dev/) | 按项目与批次开放 | +| [Outreachy](/events/outreachy) | 开源实践 | [Outreachy 官方活动与资格入口](https://www.outreachy.org/) | 按轮次申请 · 需先核对资格 | +| [开源操作系统训练营](/events/oscamp) | 系统开发 | [LearningOS 开源学习社区](https://github.com/learningos) | 集中授课已结束 · 回放学习见官网 | +| [“挑战杯”全国大学生课外学术科技作品竞赛](/events/challenge-science) | 创新创业 | [挑战杯官网赛事介绍](https://www.tiaozhanbei.net/) | 与创业计划竞赛分届举办 | +| [“挑战杯”中国大学生创业计划竞赛](/events/challenge-business) | 创新创业 | [挑战杯官方历史站与 2026 通知入口](https://old.tiaozhanbei.net/) | 2026 第十五届 · 校内推荐另查 | +| [CCF大学生区块链安全技术与创新应用竞赛](/events/blockchain) | 网络安全 | [2026 年第五届竞赛章程](https://btc.ccf.org.cn/competitioncharter) | 2026 报名至 10 月 20 日 · 时刻见官网 | +| [全国大学生电子设计竞赛](/events/electronic) | 机器人与硬件 | [全国大学生电子设计竞赛组委会官网](https://nuedc.xjtu.edu.cn/) | 2026 专题赛 · 分项查看 | +| [中国国际大学生创新大赛](/events/innovation) | 创新创业 | [教育部关于举办中国国际大学生创新大赛(2026)的通知](https://hudong.moe.gov.cn/srcsite/A08/s5672/202607/t20260731_1445670.html) | 2026 全国报名至 9 月 25 日 12:00 | +| [“计图”人工智能算法挑战赛](/events/jittor) | 人工智能与数据 | [计图官方第五届赛事介绍(2025)](https://cg.cs.tsinghua.edu.cn/jittor/news/2025-04-25-13-44-00-00-DiWuJieJittorTiaozhansai/) | 名称有依据;当前规则待复核 | +| [点亮计划-开源之夏](/events/ospp) | 开源实践 | [点亮计划-开源之夏 2026 官方 FAQ](https://docs2026.summer.ospp.ac.cn/help/FAQ) | 2026 滚动开放 · 按项目安排 | +| [Google Summer of Code 2026](/events/gsoc-2026) | 开源实践 | [Google 官方时间线](https://developers.google.com/open-source/gsoc/timeline) | 2026 年度,含延长项目及评估 | +| [Hacktoberfest 2026](/events/hacktoberfest-2026) | 开源实践 | [Hacktoberfest 官网](https://hacktoberfest.com/) | 2026 活动说明 | +| [SCSWiki 开源共建](/events/wiki-contribution) | 开源实践 | [SCSWiki 仓库](https://github.com/CWNU-Open-Source-Community/SCSWiki) | 本项目持续共建,不是对外主办的比赛 | + +## 当届变化与时间信息 + +### 开源之夏:2026 年改为滚动项目模式 + +官方 FAQ 的名称为“点亮计划-开源之夏”,本届围绕 RISC-V 基础软件生态,项目和开发阶段滚动开放,并加入学生领航模式。因此,目录改为“2026 滚动开放 · 按项目安排”,没有继续套用往年的统一暑期报名表。[2026 官方 FAQ](https://docs2026.summer.ospp.ac.cn/help/FAQ)。 + +### 开源学习与比赛结束不能用同一个状态解释 + +2026 春夏季开源操作系统训练营的集中学习周期为 3 月 1 日至 6 月 21 日,但官方说明全年可报名、通过回放学习。本目录保留训练营入口,同时说明集中课程已结束,不把它显示成仍在集中授课。[训练营官方页](https://opencamp.cn/os2edu/camp/2026spring)。 + +GSoC 的申请截止、编码周期和导师评估截止是不同阶段;活动尚在进行不代表仍能报名。Hacktoberfest 2026 官网介绍的活动形式也应按当届页面阅读,不能直接复用过去按 PR 数量达标的规则。[GSoC 时间线](https://developers.google.com/open-source/gsoc/timeline)、[Hacktoberfest 官网](https://hacktoberfest.com/)。 + +### 可供近期关注的官方日期 + +- 中国国际大学生创新大赛(2026):教育部通知列出的国内报名截止为 **9 月 25 日 12:00**;学校推荐和审核可能更早。[教育部通知](https://hudong.moe.gov.cn/srcsite/A08/s5672/202607/t20260731_1445670.html)。 +- CCF大学生区块链安全技术与创新应用竞赛:2026 章程列出的报名截止日期为 **10 月 20 日**,作品提交截止日期为 **10 月 31 日**;决赛日期是预计值,不据此生成确定倒计时。[官方章程](https://btc.ccf.org.cn/competitioncharter)。 +- 全国高校计算机能力挑战赛:已找到 2026 年第八届大赛规程及赛项规程,须按具体赛项查看日期,不能用一项模拟赛时间代替整场比赛。[大赛规程](https://www.ncccu.org.cn/index/Cms/content.html?id=374)、[赛项规程](https://www.ncccu.org.cn/index/Cms/content.html?id=373)。 + +以上仅是截至核验日的公开信息摘要。常设目录不据这段文字永久标记“报名中”。 + +## 证据冲突、缺口与后续核验 + +| 问题 | 已知情况 | 本次处理与下一步 | +| ------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| 计图 2026 规则 | 官方检索摘要出现第六届,但正文访问受限;可追溯到第五届官方介绍 | 保留全称与常设入口,页面标记待核验;补查可公开访问的第六届公告后再填赛题与时间 | +| 中国软件杯最新日期 | 官网正文访问不稳定;高校转载、赛题平台出现不同报名日期,且含校内安排 | 使用正式全称,页面标记待核验;不选择其中一个日期冒充统一最新截止 | +| GLCC 2026 招募 | 本次找到的明确招募通知属于 2025 年 | 不把历届通知改成 2026;等待当届主办方材料 | +| BDCI 当前平台与赛程 | 学会介绍与 2025 总结可确认赛事身份,新的平台线索不足以替代完整赛规 | 保留学会入口,不写推测的 2026 日程 | +| 常设入口的未来届次 | 旧届指南能证明名称或历史形式,不能保证下一届安排 | 名称变更需保留新旧证据,届次内容单独核验 | +| 校内组织与认定 | 本次主要核实全国或项目方公开资料 | 不生成本校报名群、校内截止、加分和保研承诺 | + +软件杯的日期差异可对照[高校公开转载](https://jwc.swjtu.edu.cn/vatuu/WebAction?newsId=7B02FB387DCB9620&setAction=newsDetail&viewType=web)与[赛题平台](https://mohub.net/competition/5/detail)。本次没有足够证据判断两处安排是否适用于完全相同的赛道,因此保留差异,而非强行合并。 + +## 面向学生的使用建议 + +下面是 SCSWiki 根据活动形式给出的选择建议,不是官方难度评级或获奖预测。 + +| 你的目标 | 可以先看的入口 | 做决定前重点确认 | +| ------------------ | -------------------------------------------- | ------------------------------------ | +| 第一次参与开源 | SCSWiki 共建、开源操作系统训练营导学 | 可投入时间、基础环境、社区贡献要求 | +| 练习算法和程序设计 | 蓝桥杯、天梯赛、ICPC、CCPC、码蹄杯、百度之星 | 个人或团队形式、语言、组别、校内选拔 | +| 做一个完整软件作品 | 计算机设计大赛、中国软件杯、CCF开源创新大赛 | 作品类别、交付标准、许可、团队分工 | +| 深入 AI 或数据建模 | BDCI、计图、人工智能创意赛、数学建模竞赛 | 数据与模型规则、算力、复现和论文要求 | +| 走安全或系统方向 | 信息安全竞赛、区块链竞赛、操作系统设计赛 | 授权环境、技术基础、赛道规则 | +| 软硬件结合 | 电赛、RoboMaster、机器人及人工智能大赛 | 实验设备、成本、联调与团队经验 | +| 推进研究或创新项目 | 挑战杯两类竞赛、中国国际大学生创新大赛 | 项目真实性、适用赛道、学校申报与推荐 | + +## 维护约定 + +更名时同时更新页面标题与依据,历史称呼放入检索别名;详情标题、目录标题和侧边栏从同一份 Front Matter 读取。补充当届时间必须给出来源,常设入口与具体年度条目不得混用状态。信息变化可通过[推荐活动与补充经验](/events/contribute)提交。 + +本次未逐条收录所有区域赛、平台常驻题库、职业认证、青少年赛事或所有线上练习赛,也没有把缺少可靠来源的宣传信息加入目录。 diff --git a/docs/events/robomaster.md b/docs/events/robomaster.md new file mode 100644 index 0000000..7a96705 --- /dev/null +++ b/docs/events/robomaster.md @@ -0,0 +1,56 @@ +--- +title: 'RoboMaster机甲大师高校系列赛' +description: '从机器人对抗、联盟赛事到人工智能挑战,锻炼软硬件团队协作能力。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [{ 'name': 'RoboMaster机甲大师高校系列赛官方入口', 'url': 'https://www.robomaster.com/zh-CN' }] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['RoboMaster', '机甲大师', 'RM', '机甲大师超级对抗赛'], + 'topic': '机器人与硬件', + 'eyebrow': 'RoboMaster', + 'cover': 'ladder', + 'tags': ['机器人', '嵌入式', '计算机视觉'], + 'beginner': false, + 'schedule': '常设入口 · 各届与赛项分别安排', + 'official': 'https://www.robomaster.com/zh-CN', + 'order': 24, + 'checked': '2026-09-12', + } +--- + + + +# RoboMaster机甲大师高校系列赛 + +从机器人对抗、联盟赛事到人工智能挑战,锻炼软硬件团队协作能力。 + + + +## 名称与收录范围 + +官网“高校系列赛”下设超级对抗赛、高校联盟赛、人工智能挑战赛等入口。RoboMaster 2026 机甲大师超级对抗赛是其中一项,本目录合并为一个系列入口,不把系列和子赛重复计数。 + +依据:[RoboMaster 官方赛事导航](https://www.robomaster.com/zh-CN)。 + +## 准备建议 + +根据队伍设备与经验选择具体赛事。先熟悉规则和硬件要求,再安排控制、视觉、嵌入式与机械模块的联调。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/software-cup.md b/docs/events/software-cup.md new file mode 100644 index 0000000..159e2c1 --- /dev/null +++ b/docs/events/software-cup.md @@ -0,0 +1,62 @@ +--- +title: '“中国软件杯”大学生软件设计大赛' +description: '围绕企业和行业赛题开发软件作品,练习需求分析、实现、测试与成果演示。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'official-source' +status: 'needs-review' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { 'name': '“中国软件杯”大学生软件设计大赛官方入口', 'url': 'https://www.cnsoftbei.com/' }, + { + 'name': '第十五届赛事通知(西南交通大学公开转载)', + 'url': 'https://jwc.swjtu.edu.cn/vatuu/WebAction?newsId=7B02FB387DCB9620&setAction=newsDetail&viewType=web', + }, + ] +event: + { + 'kind': '学科竞赛', + 'scope': 'series', + 'aliases': ['中国软件杯', '软件杯'], + 'topic': '软件开发', + 'eyebrow': '中国软件杯', + 'cover': 'code', + 'tags': ['软件工程', '团队作品'], + 'beginner': false, + 'schedule': '2026 第十五届 · 最新安排查官网', + 'official': 'https://www.cnsoftbei.com/', + 'order': 20, + 'checked': '2026-09-12', + } +--- + + + +# “中国软件杯”大学生软件设计大赛 + +围绕企业和行业赛题开发软件作品,练习需求分析、实现、测试与成果演示。 + + + +## 名称与收录范围 + +第十五届通知使用“‘中国软件杯’大学生软件设计大赛”。本次检索官网正文访问不稳定,名称与赛事方向交叉参考高校公开转载;其中的校内安排仅适用于发布学校,不适用于西华师范大学。 + +依据:[第十五届赛事通知(西南交通大学公开转载)](https://jwc.swjtu.edu.cn/vatuu/WebAction?newsId=7B02FB387DCB9620&setAction=newsDetail&viewType=web)。 + +## 准备建议 + +按所选赛题要求搭建最小可演示版本,再完善测试、文档与演示材料。A、B 组及专项赛道适用对象须核对当届规则。 + +以上准备建议由 SCSWiki 整理,不是主办方附加的参赛条件。 + +## 参与前核对 + +本页收录常设入口。“查看当届通知”不表示当前正在报名;具体资格、赛项、时间与交付要求以当届官方规则为准。学校组织报名、费用、奖项认定与推荐名额需另查本校公开正式通知。 + +## 继续了解 + +- [返回活动与竞赛中心](/events/) +- [竞赛学习指南](/competitions/) +- [收录范围与来源核验](/events/research) diff --git a/docs/events/wiki-contribution.md b/docs/events/wiki-contribution.md new file mode 100644 index 0000000..0abb88c --- /dev/null +++ b/docs/events/wiki-contribution.md @@ -0,0 +1,64 @@ +--- +title: 'SCSWiki 开源共建' +description: '从修正文档、补充公开来源开始,让你的第一份贡献帮助下一位同学。' +category: 'competitions' +audience: ['本科生', '开源贡献者'] +content_type: 'verified' +status: 'active' +maintainers: ['SCSWiki 维护组'] +sources: + [ + { + 'name': 'SCSWiki 项目与贡献指南', + 'url': 'https://github.com/CWNU-Open-Source-Community/SCSWiki', + }, + ] +event: + { + 'kind': '社区共建', + 'eyebrow': 'Hello, contributor.', + 'cover': 'wiki', + 'tags': ['文档贡献', 'Git', '校园共建'], + 'beginner': true, + 'schedule': '长期开放 · 按自己的节奏参与', + 'official': 'https://github.com/CWNU-Open-Source-Community/SCSWiki', + 'ongoing': true, + 'order': 1, + 'checked': '2026-09-12', + 'aliases': ['SCSWiki', 'Wiki共建'], + 'topic': '开源实践', + 'scope': 'edition', + } +--- + + + +# SCSWiki 开源共建 + +从修正文档、补充公开来源开始,让你的第一份贡献帮助下一位同学。 + + + +## 这是什么 + +SCSWiki 是学生维护的非官方知识库。仓库接受内容纠错、来源补充和工程改进;这里提供的是长期贡献入口,不是已经启动的限时比赛。 + +## 适合谁 + +希望尝试开源协作的同学。不要求先会编程:能描述一个问题、核实一个公开来源,就可以开始。 + +## 如何参与 + +1. 在本站找到一个可以改进的页面,例如过期链接、遗漏的说明或不清楚的步骤。 +2. 查阅公开来源,记录页面地址、问题和建议。避免加入个人隐私与未经授权的材料。 +3. 通过仓库 Issue 提交建议,或按照[如何贡献](/about/contribute)创建 Pull Request。 +4. 根据维护者反馈完善内容,合并后检查页面效果。 + +## 出发前的准备 + +- [Git 入门](/development/git-basics):了解版本管理和基础协作。 +- [可信度与内容边界](/about/trust):区分学校正式信息与学生经验。 + +## 时间与成果 + +没有统一报名截止时间,也不设自动发放的证书或奖项。实际任务与合并情况以仓库记录为准。首次贡献建议选择范围清晰的小改动。 diff --git a/scripts/tests/events.test.ts b/scripts/tests/events.test.ts new file mode 100644 index 0000000..4b5c3f3 --- /dev/null +++ b/scripts/tests/events.test.ts @@ -0,0 +1,126 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import matter from 'gray-matter'; +import { describe, expect, it } from 'vitest'; +import { eventSchema } from '../../docs/.vitepress/event-schema'; +import { eventStatus, filterEvents, type EventItem } from '../../docs/.vitepress/events'; +import { eventSidebar } from '../../docs/.vitepress/event-sidebar'; + +const fixture: EventItem = { + title: 'Open Source 实践', + description: '与社区协作', + url: '/events/test', + kind: '开源活动', + eyebrow: 'CODE', + cover: 'code', + tags: ['Git', 'TypeScript'], + beginner: true, + schedule: '测试时间', + checked: '2026-09-12', + official: 'https://example.com/', + order: 1, + registrationOpen: '2026-09-01T00:00:00+08:00', + registrationClose: '2026-09-10T00:00:00+08:00', + start: '2026-09-15T00:00:00+08:00', + end: '2026-09-20T00:00:00+08:00', +}; +const at = (date: string) => Date.parse(`${date}T00:00:00+08:00`); +const filters = { query: '', kind: '', status: '', beginner: false, archive: false }; + +describe('活动状态与筛选', () => { + it('常设入口不推测当前报名状态,且不可混入具体届次时间', () => { + const series = { + ...fixture, + scope: 'series' as const, + registrationOpen: undefined, + registrationClose: undefined, + start: undefined, + end: undefined, + }; + expect(eventStatus(series, at('2026-09-12'))).toBe('查看当届通知'); + expect(filterEvents([series], { ...filters, archive: true }, at('2030-09-12'))).toHaveLength(0); + expect(eventSchema.safeParse(series).success).toBe(true); + expect(eventSchema.safeParse({ ...series, ongoing: true }).success).toBe(false); + expect(eventSchema.safeParse({ ...series, end: fixture.end }).success).toBe(false); + }); + it('正式名称之外支持历史称呼检索,并与实践方向组合筛选', () => { + const renamed = { ...fixture, aliases: ['互联网+'], topic: '创新创业' }; + expect( + filterEvents( + [renamed], + { ...filters, query: '互联网+', topic: '创新创业' }, + at('2026-09-12'), + ), + ).toHaveLength(1); + expect( + filterEvents( + [renamed], + { ...filters, query: '互联网+', topic: '网络安全' }, + at('2026-09-12'), + ), + ).toHaveLength(0); + }); + it('在报名、开始和结束边界更新状态,不将截止后的活动显示为报名中', () => { + expect(eventStatus(fixture, at('2026-09-01'))).toBe('报名中'); + expect(eventStatus(fixture, at('2026-09-10'))).toBe('报名已截止'); + expect(eventStatus(fixture, at('2026-09-15'))).toBe('进行中'); + expect(eventStatus(fixture, at('2026-09-20'))).toBe('已结束'); + expect(eventStatus(fixture, Date.parse('2026-09-09T16:00:00Z'))).toBe('报名已截止'); + }); + it('未核验时间不猜测开放报名,长期入口和手动归档保持明确', () => { + const unknown = { + ...fixture, + registrationOpen: undefined, + registrationClose: undefined, + start: undefined, + end: undefined, + }; + expect(eventStatus(unknown, at('2026-09-12'))).toBe('时间待确认'); + expect(eventStatus({ ...unknown, ongoing: true }, at('2026-09-12'))).toBe('长期开放'); + expect(eventStatus({ ...unknown, ongoing: true, archived: true }, at('2026-09-12'))).toBe( + '已结束', + ); + }); + it('支持组合筛选、大小写和空白,并把已结束活动放入归档', () => { + expect( + filterEvents( + [fixture], + { ...filters, query: ' OPEN git ', kind: '开源活动', beginner: true }, + at('2026-09-12'), + ), + ).toHaveLength(1); + expect( + filterEvents([fixture], { ...filters, kind: '学科竞赛' }, at('2026-09-12')), + ).toHaveLength(0); + expect( + filterEvents([fixture], { ...filters, status: '报名中' }, at('2026-09-12')), + ).toHaveLength(0); + expect(filterEvents([fixture], filters, at('2026-09-20'))).toHaveLength(0); + expect(filterEvents([fixture], { ...filters, archive: true }, at('2026-09-20'))).toHaveLength( + 1, + ); + }); + it('拒绝没有截止时间的开放报名及倒序日期', () => { + expect(eventSchema.safeParse({ ...fixture, registrationClose: undefined }).success).toBe(false); + expect(eventSchema.safeParse({ ...fixture, end: fixture.start }).success).toBe(false); + }); + it('所有实际活动使用有效字段且官网包含在来源列表中', () => { + const root = path.resolve('docs/events'); + const entries = fs + .readdirSync(root) + .filter((file) => file.endsWith('.md')) + .map((file) => matter.read(path.join(root, file)).data) + .filter((data) => data.event); + expect(new Set(entries.map((entry) => entry.title)).size).toBe(entries.length); + const navigation = eventSidebar().flatMap((group) => group.items ?? []); + for (const entry of entries) { + const event = eventSchema.parse(entry.event); + expect(event.aliases?.length).toBeGreaterThan(0); + expect(event.topic).toBeTruthy(); + expect(navigation.filter((item) => item.text === entry.title)).toHaveLength(1); + expect(entry.sources.some((source: { url: string }) => source.url === event.official)).toBe( + true, + ); + } + }); +});