Answer

Answer

t.me/js_test

Ответ:

const reverse = (number) => {
  const reg = /(?<minus>-?)(?<digits>\d+[^0])(?:0*$)/g;

  return number.toString().replace(reg, (...args) => {
    const { minus, digits } = args.pop();
    const reversed = `${minus}${digits.split('').reverse().join('')}`;

    return -2147483648 <= reversed && reversed <= 2147483648 - 1
      ? reversed
      : '0';
  });
};

Обьяснение:

С помощью именных груп в регулярном выражении, разбиваем число на две части - минус и цифровая часть без нулей в конце(с помощью (?:0*$) мы отрезаем нули).

Если число отрицательное, то значение minus === '-', если положительное - minus === ''.
На следующем шаге мы делаем реверс цифровой части числа, и создаём строку с реверснутым числом. Если полученное число выходит за рамки заданного интервала - возвращаем '0', в ином случае возвращаем полученное число.


Код для проверки:

const reverse = (number) => {
  const reg = /(?<minus>-?)(?<digits>\d+[^0])(?:0*$)/g;

  return number.toString().replace(reg, (...args) => {
    const { minus, digits } = args.pop();
    const reversed = `${minus}${digits.split('').reverse().join('')}`;

    return -2147483648 <= reversed && reversed <= 2147483648 - 1
      ? reversed
      : '0';
  });
};

console.log(reverse('123')); // 321
console.log(reverse('120')); // 21
console.log(reverse('-321')); // -123
console.log(reverse('2990474529917009')); // 0




Report Page