diff --git a/web/src/lib/server/repos.ts b/web/src/lib/server/repos.ts index a743f16..59fd180 100644 --- a/web/src/lib/server/repos.ts +++ b/web/src/lib/server/repos.ts @@ -7,6 +7,9 @@ import { templateCSharpGitIgnore, templateCSharpProblem, templateCSharpProblemProj, + templateCppCMakeLists, + templateCppGitIgnore, + templateCppProblem, templateJavaProblem } from './templates'; @@ -42,6 +45,23 @@ async function addProblemsCSharp(opts: OptsAddProblems) { }); } +async function addProblemsCPP(opts: OptsAddProblems) { + let cmakeLists = templateCppCMakeLists; + opts.contest.problems.forEach((problem) => { + cmakeLists += `add_executable(${problem.pascalName} ${problem.pascalName}/${problem.pascalName}.cpp)`; + }); + opts.fs.writeFileSync(join(opts.dir, 'CMakeLists.txt'), cmakeLists); + + opts.contest.problems.forEach((problem) => { + opts.fs.mkdirSync(join(opts.dir, problem.pascalName)); + const filledTemplate = templateCppProblem.replaceAll('%%pascalName%%', problem.pascalName); + opts.fs.writeFileSync( + join(opts.dir, problem.pascalName, `${problem.pascalName}.cpp`), + filledTemplate + ); + }); +} + export async function createRepos(contestId: number) { const vol = new memfs.Volume(); const fs = createFsFromVolume(vol); @@ -63,6 +83,9 @@ export async function createRepos(contestId: number) { } else if (team.language === 'CSharp') { addProblemsCSharp({ fs, dir: team.id.toString(), contest }); fs.writeFileSync(join(team.id.toString(), '.gitignore'), templateCSharpGitIgnore); + } else if (team.language === 'CPP') { + addProblemsCPP({ fs, dir: team.id.toString(), contest }); + fs.writeFileSync(join(team.id.toString(), '.gitignore'), templateCppGitIgnore); } else { console.error('Language not supported'); return; diff --git a/web/src/lib/server/templates.ts b/web/src/lib/server/templates.ts index 5f0f0f5..4eca960 100644 --- a/web/src/lib/server/templates.ts +++ b/web/src/lib/server/templates.ts @@ -26,3 +26,20 @@ export const templateCSharpProblemProj = ` `; + +export const templateCppCMakeLists = `cmake_minimum_required(VERSION 3.5) + +project(bwcontest) + +`; + +export const templateCppProblem = `#include + +int main() +{ + std::cout << "Hello %%pascalName%%!" << std::endl; + return 0; +}`; + +export const templateCppGitIgnore = `/build +`;