Для сегодняшнего алгоритма мы собираемся написать функцию с именем beautifulDays, которая будет принимать три целых числа в качестве входных данных: i, j и k.

Представьте, что вы играете в игру с целыми числами, в которой вы находите разницу между числом и его обратной стороной. Пример: получить число 16 и перевернуть число 61. Если вычесть 16 из 61, вы получите 45. А теперь представьте, как вы применяете эту игру, чтобы узнать, когда идти в кино.

Вы хотите пойти в кино, но вы пойдете только в «прекрасный день». Прекрасный день определяется красивым числом. Красивое число - это когда вы обнаруживаете разницу между числом и его обратной стороной, и результат делится без остатка на определенное число k.

Цель этой функции - взять диапазон чисел [i… j] и найти только красивые числа в этом диапазоне. Функция выведет общее количество красивых чисел в этом диапазоне. Приведем пример:

let i = 13;
let j = 16;
let k = 6;

Вы хотите пойти в кино в 13, 14, 15 и 16 дни. Это диапазон. Теперь нам нужно знать, какие дни прекрасны. Берем первое число в нашем диапазоне, 13:

31 — 13 = 18
18 / 6 = 3

Мы знаем, что день 13 прекрасен, потому что, взяв разницу между числом и его обратной стороной, мы делим ее на k, и результат равен целому числу 3.

Проделаем то же самое с остальными числами в диапазоне:

14:

41 — 14 = 27
27 / 6 = 4.5 
// not a whole number so 14 is not beautiful

15:

51 — 15 = 36
36 / 6 = 6
// a whole number so 15 is beautiful

16:

61 — 16 = 45
45 / 6 = 7.5
// not a whole number so 16 is not beautiful

Посмотрев на все числа в нашем диапазоне, мы обнаруживаем, что только два дня, 13 и 15, считаются красивыми. Функция вернет 2.

Давайте превратим это в код:

let beautiful = [];

Мы начинаем с создания пустого массива beautiful, который будет содержать все красивые числа.

Затем мы перебираем диапазон, включая i и j.

for(let start = i; start <= j; start++){
    
    let numString = start+"";
    let reverse = numString.split('').reverse().join('');
if((start - reverse*1) % k === 0){
      beautiful.push(start)
    }
    
}

Начиная с первого оператора, мы конвертируем каждое число в диапазоне в строку. Мы делаем это, объединяя число с пустой строкой.

let reverse = numString.split('').reverse().join('');

Затем, чтобы перевернуть строку, нам нужно подготовить строку, чтобы мы могли использовать метод JavaScript reverse(). Обратный метод работает с массивами, поэтому мы используем метод split() для разделения строки на массив подстрок.

Мы используем пустую строку '' в качестве разделителя в нашем методе разделения, потому что мы хотим, чтобы строка разделялась между каждым символом. Теперь, когда наша строка представляет собой массив, мы можем перевернуть ее. Что дальше?

Мы превращаем массив обратно в строку, объединяя все символы в массиве вместе, чтобы сформировать строку. Здесь мы снова используем пустую строку в качестве разделителя, поскольку мы не хотим, чтобы что-либо разделяло каждый символ, когда мы присоединяемся к нашей строке.

if((start - reverse*1) % k === 0){
      beautiful.push(start)
}

В нашем if-выражении мы проверяем, красиво ли наше текущее число в диапазоне. Мы вычтем обратное число из исходного числа. Чтобы выполнить вычитание, нам нужно преобразовать обратное число обратно в целое. Мы делаем это, умножая строку на 1, и число снова становится целым. Теперь мы можем выполнить вычитание. Мы используем оператор по модулю %, чтобы определить, делится ли наш результат вычитания равномерно на k. Число, которое делится равномерно, будет выводить 0, что означает отсутствие остатков. Если он делится равномерно, мы добавляем наше число из диапазона в массив beautiful.

Когда мы закончили с нашим циклом, мы выводим количество красивых чисел в диапазоне. Мы получаем это путем вывода длины нашего массива beautiful.

return beautiful.length;

Вот остальной код:

function beautifulDays(i, j, k) {
  let beautiful = [];
for(let start = i; start <= j; start++){
let numString = start+"";
    let reverse = numString.split('').reverse().join('');
if((start - reverse*1) % k === 0){
      beautiful.push(start)
    }
  }
  return beautiful.length;
}

Если вы нашли этот алгоритм полезным или полезным, ознакомьтесь с другими моими решениями для алгоритмов JavaScript: