Ich implementiere eine gewichtete Lotterie in groovy. Es ermöglicht einigen Teilnehmern eine bessere Gewinnchance als andere (im Prinzip genau wie der NBA-Entwurf). Es funktioniert, indem Sie jeden Teilnehmer N-mal in ein Array werfen, wobei N die Anzahl der Chancen ist, die Sie gewinnen müssen. Es wählt dann einen zufälligen Index von diesem Array aus.
Wie ein guter kleiner Programmierer schrieb ich einen Test. Er wählt 100 Mal einen Gewinner aus der Gruppe aus und gibt aus, wie oft jeder Teilnehmer ausgewählt wurde. Die Erwartung ist, dass sie ungefähr in Übereinstimmung mit der Anzahl der Wiederholungen liegen würde (basierend auf ihrer Anzahl von Chancen). Die Ergebnisse waren ... aus.
Ich habe das Problem auf eine einzelne Zeile reduziert, die, wenn sie in zwei separate Anweisungen aufgeteilt wird, perfekt funktioniert. Eine abgespeckte Version der Routine ist unten. Die "schlechte" Version ist aktiv und die "gute Version" ist auskommentiert
%Vor%Meine Frage ist, was stimmt nicht mit der One-Liner-Version? Meine Vermutung ist, dass es eine Reihenfolge der Ausführung Problem ist, aber ich kann nicht für das Leben von mir herausfinden, wo es von den Schienen geht.
ist
%Vor% ruft randomRange()
zweimal auf, im Gegensatz zum Arbeitsbeispiel, in dem es einmal aufgerufen und einer Variablen zugewiesen wird.
Tags und Links groovy