CyborgBeta
Captain
- Registriert
- Jan. 2021
- Beiträge
- 3.342
Hi! Ich hab erstmal die folgende Funktion:
Das heißt, die Array-Elemente werten erst nach der kürzesten Distanz zum "Creep" (das ist ein Objekt auf einer Karte) sortiert und dann wird, sofern vorhanden, aus den ersten drei ein zufälliges Element zurückgegeben.
Das funktioniert auch ganz gut... dennoch möchte ich, dass mit einer Wahrscheinlichkeit von 50 % das erste Element zurückgegeben wird, und mit 33,3 % das zweite, und mit 16,6 % das dritte.
Gibt es nur zwei Elemente, so mit den Wahrscheinlichkeiten 66,6 % und 33,3 % das erste bzw. zweite Element...
Wie formuliere ich das am besten algorithmisch in JS/ES6/TS (so dass es dann auch für
Vielen Dank 😊
Javascript:
function getRandomFromArray(a, creep) {
if (a && a.length) {
a.sort((a, b) => creep.pos.getRangeTo(a) - creep.pos.getRangeTo(b));
let b = [];
for (let i = 0; i < a.length && i < 3; i++) {
let e = a[i];
b.push(e);
}
return b[Math.floor(Math.random() * b.length)];
}
return null;
}
Das heißt, die Array-Elemente werten erst nach der kürzesten Distanz zum "Creep" (das ist ein Objekt auf einer Karte) sortiert und dann wird, sofern vorhanden, aus den ersten drei ein zufälliges Element zurückgegeben.
Das funktioniert auch ganz gut... dennoch möchte ich, dass mit einer Wahrscheinlichkeit von 50 % das erste Element zurückgegeben wird, und mit 33,3 % das zweite, und mit 16,6 % das dritte.
Gibt es nur zwei Elemente, so mit den Wahrscheinlichkeiten 66,6 % und 33,3 % das erste bzw. zweite Element...
Wie formuliere ich das am besten algorithmisch in JS/ES6/TS (so dass es dann auch für
n
Elemente gelten kann)?Vielen Dank 😊