如何设计AtCoder代码模板:atcoder-cli的template.json深度解析
如何设计AtCoder代码模板atcoder-cli的template.json深度解析【免费下载链接】atcoder-cliAtCoder command line tools项目地址: https://gitcode.com/gh_mirrors/at/atcoder-cli如果你还在每道 AtCoder 题目前手动新建文件、粘贴头文件那么atcoder-cli的template.json值得你花 10 分钟学会。作为一款 AtCoder 命令行工具atcoder-cli 的模板系统能让你在创建比赛目录时自动铺好代码骨架、拷入静态文件、执行任意 shell 命令——真正做到一场比赛一次配置全部自动。本文带你完整拆解 template.json 的每个字段、格式字符串与环境变量最后给出一个 3 步落地的实战方案。 模板能帮你做什么3 件事当你运行acc new新建比赛或acc add新增题目时atcoder-cli 可以替你完成三件事铺放程序骨架把你的main.cpp自动复制到每题目录拷贝静态文件比如package.json、.gitignore、编译脚本执行 shell 命令比如npm install、生成编译规则每个模板就是配置目录下的一个文件夹核心是里面的template.json文件。模板的加载、校验与展开逻辑在 src/template.ts 中实现字段约束定义在 schema/acc-template-schema.json测试用例可以参考 tests/tests/template.ts。 template.json 字段全解析先看一份全家桶示例后续逐字段讲解{ task: { program: [main.cpp, [foo.cpp, {TaskID}.cpp]], submit: main.cpp, static: [foo, [bar, bar_{TaskLabel}]], testdir: tests_{TaskID}, cmd: echo Hi! }, contest: { static: [[gitignore, .gitignore]], cmd: echo Ho! } }task区块必填为每道题自动执行字段必填作用program✅骨架程序复制进题目目录不覆盖已有文件submit✅提交文件配置后acc submit可省略文件名直接提交static❌静态文件使用--force时会覆盖同名文件testdir❌样例数据下载目录名不配则回退到全局配置cmd❌文件就绪后执行的 shell 命令这里最容易踩坑的是program与static的区别program里的文件已经存在时会跳过并提示Skip保护你写了一半的代码而static的文件每次都会覆盖适合放需要保持最新的公共脚本。两种写法program: [main.cpp] // 原样复制 program: [[main.cpp, {TaskID}.cpp]] // 复制并按模板重命名数组形式表示[源文件名, 目标文件名]目标名支持格式字符串。contest区块可选建比赛目录时执行一次static语义同task.static常用于放置.gitignore、README.mdcmd语义同task.cmd但没有$TASK_*系列变量✨ 格式字符串文件名的自动改名术submit、testdir以及所有目标文件名中都可以使用格式字符串由 src/project.ts 中的格式化函数完成替换完整清单可通过acc format -h查看定义见 src/help.ts占位符含义示例{TaskLabel}题目标签A、B、C{TaskID}题目 IDarc100_a{TaskTitle}题目标题—{index0}/{index1}题号0 起 / 1 起0、1{alphabet}题号字母a、b、aa{ContestID}比赛 IDarc100{ContestTitle}比赛标题—{TailNumberOfContestID}比赛 ID 尾部数字100效果直观写program: [[main.ts, {TaskID}.ts]]题目 A 的骨架文件会自动命名为abc001_a.ts。cmd可用的环境变量速查命令以题目目录或比赛目录为工作目录执行参数通过环境变量传入task.cmd$TEMPLATE_DIR、$TASK_DIR、$TASK_ID、$TASK_INDEX、$CONTEST_DIR、$CONTEST_IDcontest.cmd仅前三个和$CONTEST_DIR、$CONTEST_ID实用写法示例cmd: npm install可让 TypeScript 比赛开箱即跑cmd: echo $TASK_ID适合调试确认变量是否正确注入。 实战3 步搭好你的第一个 AtCoder 代码模板第 1 步创建模板目录cd acc config-dir mkdir cpp cd cpp第 2 步编写 template.json 与骨架代码在同目录下放入你自己的main.cpp个人头文件、模板代码并编写template.json{ contest: { static: [[gitignore, .gitignore]] }, task: { program: [main.cpp], submit: main.cpp } }template.json必须包含task块且task内submit与program为必填项缺失时会在校验阶段直接报错。第 3 步使用并设为默认acc templates # 查看所有可用模板 acc new abc001 --template cpp # 指定模板创建比赛 acc config default-template cpp # 设为默认模板之后无需再写 --template 常见坑与排查思路加载时报 schema 错误先检查task.submit/task.program是否缺失字段约束见 schema/acc-template-schema.json骨架文件没出现查看终端是否有Skip提示——program文件已存在时会被跳过这是保护机制而非故障cmd没按预期执行确认当前工作目录是题目目录并优先用echo $TASK_ID这类命令验证环境变量样例目录名不对未配置testdir时会使用全局配置default-test-dirname-format的默认值 小结template.json 是 atcoder-cli 的灵魂配置task管每道题、contest管整场比赛配合格式字符串与环境变量几乎可以自动化比赛中的全部准备工作。掌握它之后每次acc new都是一次开箱即战把时间留给真正思考算法的环节。【免费下载链接】atcoder-cliAtCoder command line tools项目地址: https://gitcode.com/gh_mirrors/at/atcoder-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻