Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавить проверки кода решения (с примером кода проверки) #114

Open
fiftinmen opened this issue Mar 5, 2024 · 0 comments

Comments

@fiftinmen
Copy link

Некоторые задачи требуют решения с использованием определённых техник (например, рекурсивной функции), но в принципе того же результата можно получить и без них. При этом тесты проверяют только результат выполнения функции, но не то, как функция работает. В итоге студент может не понять урок и применить ту технику, которую он уже знает, а не ту, которую ему нужно изучить.

Для проверки того, как функция работает, нужно исследовать код решения. Вот пример того, как это можно сделать для проверки на то, использует ли студент рекурсивную функцию, в случае Javascript. Написал с помощью chatGPT (для ускорения и чтобы голову не ломать над регулярным выражением), но проверил, работает верно.

Вот собственно обсуждаемый пример: требуется написать рекурсивную функцию, реализующую итеративный процесс.
https://ru.hexlet.io/courses/introduction_to_programming/lessons/iterative/exercise_unit

Этот подход можно улучшить и для проверки того, итеративный процесс или рекурсивный.

function extractFunctionsFromString(str) {
  const regex =
    /([a-zA-Z_$][0-9a-zA-Z_$]*)\s*=\s*\(([^)]*)\)\s*=>\s*{([^}]*)}/g;
  const functions = [];
  let match;
  while ((match = regex.exec(str)) !== null) {
    const functionName = match[1];
    const args = match[2].split(",").map((arg) => arg.trim());
    const body = match[3];

    functions.push({ functionName, arguments: args, body });
  }

  return functions;
}

const str =
  "hello const add = (a, b) => { return add(a,b); } my name is cirill const abb = (a, b) => { return a + b; }";
const extractedFunctions = extractFunctionsFromString(str);

console.log(extractedFunctions);
function isRecursiveFunction(extractedFunction) {
  results = [];
  for (const func of extractedFunction) {
    if (func.body.includes(func.functionName)) {
      results.push(true);
    } else {
      results.push(false);
    }
  }
  return results;
}

console.log(isRecursiveFunction(extractedFunctions));
@fiftinmen fiftinmen changed the title Добавить проверки кода решения Добавить проверки кода решения (с примером кода проверки) Mar 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant