Я пытаюсь генерировать числа , которые равны 100 (%), но все числа должны быть как минимум 4 числа друг от друга. Поэтому, если я сгенерирую 4 числа, они должны быть такими, например, [22,28,15,35] и не могут быть такими [22,28,20,30] поскольку разница между 28-30 и 22 - 20 меньше 4.
Мне удалось собрать метод генерации чисел, равных чему-то похожему на это.
generate (max, many) {
this.numbers_array = []
this.normalized_numbers_array = []
this.sum = 0
for (let i = 0; i < many; i++) {
this.numbers_array.push(Math.random())
this.sum += this.numbers_array[i]
}
this.remaining = max
for (let i = 0; i < this.numbers_array.length; i++) {
this.outcome= (this.numbers_array[i] / this.sum) * max
this.normalized_numbers_array[i] = Math.floor(this.outcome)
this.remaining -= this.normalized_numbers_array[i]
if (i + 1 == this.numbers_array.length) {
while (this.remaining > 0) {
this.normalized_numbers_array[i]++
this.remaining--
}
}
}
}
И работает отлично. Мой следующий подход был попыткой сравнить нормализованные числа друг с другом через два для циклов и операторов if . Затем в соответствии с различиями между числами друг с другом, я хотел добавить 2% к одному и подставить 2% от других из двух сравниваемых чисел. Затем я помещаю их в новый массив, который снова хочу нормализовать.
for (let i = 0; i < this.normalized_numbers_array.length; i++) {
for (let j = i + 1; j < this.normalized_numbers_array.length; j++) {
if (Math.abs(this.normalized_numbers_array[i] - this.normalized_numbers_array[j]) < 5) {
//do something
if (this.normalized_numbers_array[i] > this.normalized_numbers_array[j]) {
//do something
} else if (this.normalized_numbers_array[i] <= this.normalized_numbers_array[j]) {
//do something
}
}
}
} * * тысяча двадцать-один
Однако этот подход некорректен. Как и путем добавления или подстановки, я могу сделать новые различия, которые меньше 4. Например, [35,18,26,21] -> [35,16,26,23] Разница между 26 и 23 составляет 3 после смены.
Я думал создать другой цикл, который будет работать, пока есть различия. Но я не уверен, что это сработает. Поэтому мне было интересно, есть ли лучшее рабочее решение для этой проблемы - возможно, возможность генерировать эти числа с разницей в размерах от начала и не нужно менять их после.