import { Contest, Problem, SiteDescription } from "./types"; /** * Not a real site. * * Util to create personal problems and debug this tool. */ export const PERSONAL = new SiteDescription( "personal", "Not a site. Custom problems and contest.", "Contest name", "Problem name", async numProblems => { let total = Number.parseInt(numProblems); let problems = []; for (let i = 0; i < total; i++) { problems.push(new Problem(`P${i + 1}`, `P${i + 1}`, ["0\n", "2\n", "9\n"], ["2\n", "4\n", "11\n"])); } return new Contest("personal", problems); }, async problemId => { return new Problem(problemId, problemId, ["0\n", "2\n", "9\n"], ["2\n", "4\n", "11\n"]); } ); /** * Not a real site. * * Create an empty contest that will be filled by user manually. */ const EMPTY = new SiteDescription( "empty", "Not a site. Create empty problems", "Contest name", "Problem name", async problemId => { // Parse problemId. It is of the form problem-name-10 // Where `problem-name` is current name and `10` is number of problems let args = problemId.split('-'); let numProblems = args[args.length - 1]; let total = Number.parseInt(numProblems); args.pop(); let name = args.join('-'); let problems = []; for (let i = 0; i < total; i++) { let name = `Z${i - 25}`; if (i < 26) { name = String.fromCharCode(i + 65); } problems.push(new Problem(name, name, [], [])); } return new Contest(name, problems); }, async problemId => { return new Problem(problemId, problemId, [], []); } ); /** * Register a new site creating an entry in this dictionary. */ export const SITES: SiteDescription[] = [ EMPTY, ]; export function getSite(site: string): SiteDescription { let result = undefined; SITES.forEach(siteDescription => { if (siteDescription.name === site) { result = siteDescription; } }); if (result !== undefined) { return result; } throw new Error("Provided site is invalid"); }