У меня есть массив родителей, которых я хочу сделать младенцами, и пустой массив (которого я должен быть фиксированной длиной), ожидающий заполнения.Как вы правильно распространяете детей?
Мне нужны дети - дети - должны быть равномерно распределены на основе того, насколько красивый их папа; Однако, мне нужно все, чтобы получить клон упаковывают их мутировавший ребенок уродливее/beautifuller, то Theres еще один шанс ... (parents.length <= children.length
)
Родитель массив отсортирован по handsomeness, так parents[0] = me;
. Что я сделал до сих пор:
for (var p = parents.legth; parent--;) {
var myself = parents[p],
aRandomDaddy = parents[~~(Math.random()*parents.length)]
iDeserveMoreThan1Child = parents.length-p;
// if this is 0 they're last in the array and just get their 1 clone. Should be different, right?
makeABabyWith(myself);
if (iDeserveMoreThan1Child) {
makeABabyWith(aRandomDaddy);
}
}
То, что я сейчас пытаюсь сделать, это выяснить способ алгоритмически makeABabyWith(aRandomDaddy)
, children.length - parents.length
раз, и принимать во внимание то, как красивый в папочки есть.
Я думал, что делать:
for(var c = parents.length, totalHandsomeness = 0; c--;)
totalHandsomeness+= parents[c].handsomeness;
...
makeABabyWith(myself);
for (var handsomenessComparedToEveryoneElse
= ~~(myself.handsomeness * children.length/totalHandsomeness);
handsomenessComparedToEveryoneElse--;) {
makeABabyWith(aRandomDaddy);
}
...
Теперь это дает распределение относительно их подтверждения, родителей. Однако, когда настил происходит, вы иногда получаете 0. Итак, если массив детей имеет длину 20, вы можете варьироваться очень широко.
Один из способов я думал о борьбе с этим является iteritively запустить эту foreloop, что-то вроде этого:
...
var childrenToBeCreated = children.length - parents.length;
...
makeABabyWith(myself);
while (childrenToBeCreated) for (var handsomenessComparedToEveryoneElse
= ~~(myself.handsomeness * children.length/totalHandsomeness);
handsomenessComparedToEveryoneElse--;) {
if (childrenToBeCreated) {
makeABabyWith(aRandomDaddy);
childrenToBeCreated--;
} else break;
}
//EDIT: realised this would run to the end in the first loop and break, instead of run through all and check for left overs.
//EDIT OF THE EDIT: no it wouldn't...
//ED...: Yes it would, the while loops inside the for loop.
...
console.log("is","this"+"a good way to do it?? would this even work");
Хотя это написано в JS ИТС том же принципе, на любом языке.
Является ли метод, который я придумал при достаточном написании этого вопроса, и как бы вы это сделали?
Редактировать: Последний пример должен был использовать Процент childrenToBeCreated
не ptotal
, я думаю, что я запутался.
'Как вы правильно распространяете детей? Это звучит скорее как юридический вопрос, а не программный. Звучит немного морально сомнительно. –
Мне пришлось подняться на этот вопрос, и ваш комментарий @SamAxe. Помещение является горьким. Лол: «Мне нужны дети». LOL Родительский массив сортируется по удобству, поэтому 'родители [0] = me' –
Весь этот вопрос является тайно рекламой с торговлей людьми. –