We have have a certain amount e.g. 300 units. This amount should be as evenly as possible distributed over 40 \"slots\" or \"bins\". It would be easy if each slot would be t
How about this
optimal.fill <- function(a, b, generalLimit = 8){
a <- pmax(0, pmin(a, generalLimit))
if(sum(a) < b){
stop("not enough room")
}
if(length(a) * min(a) <= b){
result <- rep(min(a), length(a))
} else {
result <- rep(floor(b / length(a)), length(a))
}
while(floor((b - sum(result)) / sum(result < a)) >= 1){
if(min(a[result < a]) * sum(result < a) <= b - sum(result)){
result[result < a] <-
result[result < a] + rep(min(a[result < a]), sum(result < a))
} else {
result[result < a] <-
result[result < a] +
rep(floor((b - sum(result)) / sum(result < a)), sum(result < a))
}
}
extra <- sample(which(result < a), (b - sum(result)), replace = FALSE)
result[extra] <- result[extra] + 1
return(cbind(result, result / a))
}
optimal.fill(ceiling(rnorm(40,10,4)), 300, 8)