Мы рассматриваем последовательность чисел, в которой за номером следует то же число плюс сумма его цифр. Например, за 34 следует 41 (так как 41 = 34 + (3 + 4)), за которым следует 46 (46 = 41 + (4 + 1)). Последовательность будет 34 41 46 56 67 ....
Две последовательности, которые начинаются с разных номеров, могут объединяться в данной точке, например, последовательность, начинающаяся с 471, и последовательность, начинающаяся с 480, делят число 519
Реализация функции, которая принимает старт точки двух последовательностей, а затем возвращает точку соединения этих последовательностей.
Мой ответ:
function computeJoinPoint(s1, s2) {
const digitSum = num => String(num).split('').reduce((a, b) => parseInt(a) + parseInt(b))
while (s1 !== s2) {
s1 += digitSum(s1)
s2 += digitSum(s2)
}
return s1
}
Я проверил свое решение с аргументами (471, 480) и сработало, однако, один из тестовых случаев говорит, что аргументы 57, 78, и программа ожидает некоторой точки соединения, но моя реализация не дает никакого решения.
В задаче приведены следующие ограничения:
- Указанные последовательности всегда объединяются
- 0 <точка соединения <20000000 </li>
- 0
что-то не так с моей реализацией? Есть ли математический способ определить, сходятся ли последовательности, начинающиеся с 57, 78, в какой-то момент?