Показать сообщение отдельно
Старый 22.05.2011, 03:07
Crazy вне форума Посмотреть профиль Отправить личное сообщение для Crazy Посетить домашнюю страницу Crazy Найти все сообщения от Crazy
  № 13  
Ответить с цитированием
Crazy
 
Аватар для Crazy

Регистрация: Dec 2001
Сообщений: 4,159
Цитата:
Сообщение от GBee Посмотреть сообщение
Я не понял, если честно? Поясните как? Пока вариант ИО элегантней :о))
Код AS3:
    public class Selector {
 
        public static function selectRandom(values:Array, weights:Array):uint {
            var rnd:uint = uint(calculateTotalWeight(weights) * Math.random());
            return values[findIndex(weights, rnd)];
        }
 
        private static function calculateTotalWeight(weights:Array /* uint */):uint {
            var total:uint = 0;
            for each (var weight:uint in weights) {
                total += weight;
            }
            return total;
        }
 
        private static function findIndex(weights:Array, target:uint):uint {
            var accumulated:uint = 0;
            var upperIndex:uint = weights.length - 1;
            for (var i:uint = 0; i < upperIndex; ++i) {
                accumulated += weights[i];
                if (accumulated > target) {
                    return i;
                }
            }
            return upperIndex;
        }
 
    }
P.S. Граждане, будьте проще.
__________________
GIT d++ s++:++ a C++$ UB++ P++ L+ E+ W+++ N++ w++ O+ M V- t-- 5-- X+ R+++ tv- b+++ D++