diff --git a/src/parsers/problem/EolympBasecampProblemParser.ts b/src/parsers/problem/EolympBasecampProblemParser.ts index dcf1d54..a85bbf3 100644 --- a/src/parsers/problem/EolympBasecampProblemParser.ts +++ b/src/parsers/problem/EolympBasecampProblemParser.ts @@ -5,30 +5,29 @@ import { Parser } from '../Parser'; export class EolympBasecampProblemParser extends Parser { public getMatchPatterns(): string[] { - return ['https://basecamp.eolymp.com/*/problem/*']; + return ['https://basecamp.eolymp.com/*/problems/*', 'https://basecamp.eolymp.com/*/compete/*/problem/*']; } public async parse(url: string, html: string): Promise { const elem = htmlToElement(html); const task = new TaskBuilder('Eolymp').setUrl(url); - task.setName(elem.querySelector('.tab-content h1 span').textContent); + const contentElem = elem.querySelector(url.includes('compete') ? '.tab-content' : '.content'); + + task.setName(contentElem.querySelector('h1 > span.ecm-span').textContent); const contestName = elem.querySelector('.drawer span.MuiTypography-headlineSmall')?.textContent; - if (contestName && contestName !== task.name) { + if (contestName && contestName !== task.name && contestName !== 'Basecamp') { task.setCategory(`Basecamp - ${contestName}`); } else { task.setCategory('Basecamp'); } - const [timeLimit, memoryLimit] = [...document.querySelectorAll('.tab-content span.MuiTypography-bodyMedium')].map( - span => span.childNodes[1]?.textContent, - ); - - task.setTimeLimit(parseFloat(/\d+/.exec(timeLimit)[0]) * 1000); - task.setMemoryLimit(parseInt(/\d+/.exec(memoryLimit)[0], 10)); + const [timeLimit, memoryLimit] = [...contentElem.querySelectorAll('span.MuiTypography-bodyMedium')]; + task.setTimeLimit(parseFloat(/\d+/.exec(timeLimit.textContent)[0]) * 1000); + task.setMemoryLimit(parseInt(/\d+/.exec(memoryLimit.textContent)[0], 10)); - const inputOutputBlocks = [...document.querySelectorAll('.tab-content pre')]; + const inputOutputBlocks = [...contentElem.querySelectorAll('pre')]; for (let i = 1; i < inputOutputBlocks.length; i += 2) { task.addTest(inputOutputBlocks[i - 1].textContent, inputOutputBlocks[i].textContent); }