Проблема с автоматическими тестами на FreeCodeCamp
Решаю задачи курса JavaScript на FreeCodeCamp. Написал функцию для преобразования обычных чисел в римские цифры. Когда проверяю свой код вручную через console.log, он выдает правильные результаты для всех тестовых случаев. Но автоматический тестер FreeCodeCamp почему-то говорит, что все тесты провалены.
Мой код:
// Преобразование числа в римские цифры
function numberToRoman() {
let [value] = arguments;
// Обрабатываем число от самых больших римских символов к самым маленьким
if (value == 0) {
return romanOutput;
} else {
// Начинаем с тысяч (M)
if (value >= 1000) {
let threshold = 1000;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "M");
} else if (value >= 900) {
let threshold = 900;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "CM");
} else if (value >= 500) {
let threshold = 500;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "D");
} else if (value >= 400) {
let threshold = 400;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "CD");
} else if (value >= 100) {
let threshold = 100;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "C");
} else if (value >= 90) {
let threshold = 90;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "XC");
} else if (value >= 50) {
let threshold = 50;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "L");
} else if (value >= 40) {
let threshold = 40;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "XL");
} else if (value >= 10) {
let threshold = 10;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "X");
} else if (value >= 9) {
let threshold = 9;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "IX");
} else if (value >= 5) {
let threshold = 5;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "V");
} else if (value >= 4) {
let threshold = 4;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "IV");
} else if (value >= 1) {
let threshold = 1;
let quotient = value / threshold;
processConversion(value, threshold, quotient, "I");
}
}
return romanOutput;
}
function processConversion() {
const [value, threshold, quotient, romanSymbol] = arguments;
let integerPart = Math.trunc(quotient);
let convertedRoman = "";
for (let j = integerPart; j > 0; j--) {
convertedRoman += romanSymbol;
}
romanOutput += convertedRoman;
let fractionalPart = quotient - integerPart;
if (fractionalPart > 0) {
numberToRoman(value - (integerPart * threshold), romanOutput);
}
}
let romanOutput = "";
console.log(numberToRoman(16));
Результаты тестов от FreeCodeCamp:
Все тесты показывают статус провала, хотя в консоли видно правильный результат XVI для числа 16. Не могу понять, в чем проблема. Может быть, дело в том, как я использую глобальную переменную или рекурсию?
Код логически правильный и выдает корректные римские цифры для всех проверенных случаев. Подскажите, что может быть не так с моим подходом?