По моему мнению, вы должны создать функцию, которая эффективно принимает одну цифру, и хотя она больше, чем другое число, которое необходимо уменьшить, она делает это:
const incrementWhileNeeded = (target, currentValue) =>
Math.abs(target - currentValue)
Затем вам нужно разделитьчисла в их цифры (вы можете сделать это математическим способом, используя %
, как будто вы это сделали, но просто для простоты что-то вроде: String(num1).split('').map(Number)
займет 451 и изменит его на [4, 5, 1]
.
Затем ваш следующий шаг - сопоставить эту функцию (incrementWhileNeeded) с каждой отдельной цифрой: просто сфокусируйтесь на первом числе (а затем примените forEach или .map, чтобы применить эту функцию ко всем из них.
Такэто будет выглядеть примерно так: firstNumberArray.map(incrementWhileNeeded)
Что ответит, как вы объяснили [1, 0, 2]
.
Затем .reduce () это так, чтобы вы могли получить сумму подсчетов.это уменьшит использование [1,0,2].reduce((accumulator, current) => accumulator + current)
до 3.
Так что для полной функциональности:
const incrementWhileNeeded = (target, currentValue) =>
Math.abs(target - currentValue)
const calculateMinimumMoves = (fullNumber, targetNumber) => {
const numArray = String(fullNumber).split('').map(Number)
const targetArray = String(targetNumber).split('').map(Number)
const diffArray = numArray.map((currentElement, targetArray[index]) => incrementWhileNeeded(currentElement, targetArray[index])
return diffArray.reduce((accumulator, current) => accumulator + current, 0)
}
const minimumMoves = (array1, array2) =>
array1.reduce((accumulator, current, index) =>
accumulator + calculateMinimumMoves(current, array2[index]),
0)