Skip to content
This repository was archived by the owner on Oct 10, 2025. It is now read-only.
This repository was archived by the owner on Oct 10, 2025. It is now read-only.

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

@fiftinmen

Description

@fiftinmen

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

Для проверки того, как функция работает, нужно исследовать код решения. Вот пример того, как это можно сделать для проверки на то, использует ли студент рекурсивную функцию, в случае 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));

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions