Мне нужно создать один массив чисел внутри одного диапазона, например:Распределить диапазон в массиве
[1..5] в 10 раз = [1,1,2,2,3,3,4, 4,5,5]
[1..5] в 5 раз = [1,2,3,4,5]
[1..5] в 3 раза = [1,3, 5]
def distribute(start_value, end_value, times, is_integer)
array = Array.new(times-1)
min_value = [end_value,start_value].min
max_value = [end_value,start_value].max
if max_value-min_value<times
factor = (max_value-min_value).abs/(array.size).to_f
else
factor = (max_value-min_value).abs/(array.size-1).to_f
end
for i in 0..array.size
v = [ [max_value, factor*(i+1)].min, min_value].max
is_integer ? array[i] = v.round : array[i] = v
end
start_value < end_value ? array : array.reverse
end
распределения (1, 5, 10, правда) => [1, 1, 1, 2, 2, 3, 3, 4, 4, 4 ] #WRONG должно быть [1,1,2,2,3,3,4,4,5,5]
Распределить (5, 1, 5, true) => [5, 4, 3, 2, 1] #OK
распределить (1, 5, 3, правда) => [4, 5, 5] #WRONG должно быть [1, 3, 5]
Вместо того, чтобы усложнять алгоритм для специального случая, вы можете закоротить метод: 'return [], если array_size> 0'. По крайней мере, для меня это легче понять. – FMc