и какой из двух вариантов сдвинет указатель 2*3 или 3*2?
Ваши числа сойдутся только до 12 следующим по порядку будет 14, что не является регулярным числом
spread([1, 1, 1, 1, 1], 7); // [3, 3, 3, 2, 1], хотя должно быть [3, 3, 2, 2, 2]
bins.forEach(key => result[key] += diff);
Можно вместо этого в конце всем затронутым числам дать склько нужно до последнего.
Можно это даже доказать:
Этими четырьмя операциями можно получить только рациональный полином вида F(a,b)/G(a,b).
При подставновке a=0 получим рациональный полином F2(b)/G2(b), который тождественно равен 0 при b<0 и равен b при b>=0. А значит он весь равен 0 всегда, ведь полином F2(b) должен быть тождественно равен 0 на полуоси, но такой только 1 - константа 0.
Армянское Радио теперь привел еще и метод с использованием битовых трюков для, фактически, взятия модуля разности.