function solution(n) {
while (!n.every(x => x == n[0])) {
n.forEach((v, i) => n[i] > m ? n[i] % m != 0 ? n[i] = n[i] % m : n[i] = m : v, m = Math.min(...n))
}
return n[0] * n.length
}
[6,9,21]
должно быть 9, а получается 4. А n[0] * n.length
нужен для того, чтобы посчитать сумму всех элементов нового массива (все элементы одинаковы). В исходном задании от большего элемента отнимался меньший и на место большего записывалась их разность до тех пор, пока все элементы не станут одинаковыми, но этот алгоритм слишком долгий. [56, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 142]
, проверяет, все ли числа одинаковы, если нет, то сортирует массив в порядке убывания, для каждого элемента выполняется функция forEach()
: находится минимальное число в массиве и если предыдущее число больше минимального, выполняется действие над ним: если есть остаток от деления на минимальное, то ему присваивается этот остаток, если нет - присваивается минимальное число; если предыдущее число равно минимальному, то ничего не делается. Массив на этом шаге: [2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
Все элементы массива не одинаковы, значит цикл повторяется снова и получаем массив из 14 единиц. Все элементы одинаковы, значит выдается их сумма.while
.
мне их изучать, чтобы понять.