Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.06.2012, 13:49
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 1  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
По умолчанию Настраиваемый генератор случайных чисел

Здравствуйте! Встречал ли кто-нибудь алгоритм, который случайно выдает одну из (например пяти) цифр, но при этом его можно настроить? Например, задать ему (этому классу или методу), чтобы число 5 выпадало чаще или реже, а число 2 выпадало реже или чаще и т.д. Может, даже, задавать коэффициент вероятности выпадения того, или иного числа. Или подскажите, пожалуйста, как такое сделать.
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 03.06.2012, 14:17
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 2  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Обычно ищут случайность, а вы наоборот

В массив загоните числа которые нужны... например
Код AS3:
var arr:Array = [1,2,2,2,2,2,2,2,3,4,5,5,5,5]
trace(arr[uint(Math.random() * arr.length)])


Последний раз редактировалось Партизан; 03.06.2012 в 14:44.
Старый 03.06.2012, 14:27
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Math.random() < 0.5 случается в 50% случаев, Math.random() < 0.1 случается в 10% случаев. По крайней мере должно быть так. Но для криптографии флешевый рандом, например, не подходит, т.как недостаточно информации в одном запросе. Очень часто для криптографии нужно больше 52 битов. Имитировать /dev/urandom можно примерно таким же способом, как устроен и сам urandom - т.е. копированием "шума" не имеющего цикличности - чего-нибудь связанного с действиями пользователя, например, смещение мышки, нажатые клавиши, разницу между системным временем и предполагаемым идеальным временем вызова таймера по которому рандом обновляется, конечно же, такой рандом лучше хранить на машине пользователя, для лучшей последовательности.
Естественно, каждое обращение к рандому должно генерировать его по-новому.
__________________
Hell is the possibility of sanity

Старый 03.06.2012, 14:46
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 4  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
wvxvw, чет я вашей мысли не уловил... применимо к задаче...

Старый 03.06.2012, 14:50
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 5  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Спасибо за ответы.
Партизан, вы показали как выбрать случайное число из некоторого диапазона чисел, но в этом проблема не стоит.
wvxvw, ничего не понял, но что-то подсказывает мне, что вы показали как сымитировать случайное число вручную.
К сожалению интересует другое:
Есть 5 чисел:
Код AS3:
var numbs:Array = [0, 1, 2, 3, 4];
Берем 10 попыток сгенерировать число. Флешевский рэндом выведет: 2, 4, 0, 3, 0, 1, 1, 2, 4, 3 (цифры взяты из головы).
Нужно, чтобы, например, число "2" в среднем выводилось в 2 раза чаще остальных: 1, 2, 4, 2, 3, 4, 2, 0, 1, 2.
Возможно ли создать такой, алгоритм, в котором можно задать, чтобы некоторое число выводилось чаще остальных? И если да, то как?
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 03.06.2012, 14:54
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Так расширьте исходный массив так, как показал Партизан. И делайте рандомную выборку уже оттуда.
__________________
тут я

Старый 03.06.2012, 14:55
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 7  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
например должны выпадать числа от 1 2 и 3 причём 3 должен выпадать в два раза чаще чем 1 и 2

Код AS3:
var rnd:Number = Math.random();
if(rnd > .5) return 3;
if(rnd > .25) return 2;
return 1;
если нужно настраивать вероятности на лету,
то принцип точно такой только циклом
__________________
Хороший отдых - половина работы.


Последний раз редактировалось artcraft; 03.06.2012 в 14:59.
Старый 03.06.2012, 15:25
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 8  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от КорДум Посмотреть сообщение
Так расширьте исходный массив так, как показал Партизан. И делайте рандомную выборку уже оттуда.
Не заметил, что в Партизана в массиве больше двоек Хороший способ. Наглядно видно какие числа будут чаще выпадать.
artcraft, если придется выбирать среди 10-ти 20-ти чисел - будет много писанины и много вручную производить подсчеты. Тоесть, для каждого числа из 20-ти придется выбирать диапазон и сравнивать...
Спасибо всем.
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 03.06.2012, 15:37
artcraft вне форума Посмотреть профиль Отправить личное сообщение для artcraft Посетить домашнюю страницу artcraft Найти все сообщения от artcraft
  № 9  
Ответить с цитированием
artcraft
 
Аватар для artcraft

блогер
Регистрация: Aug 2005
Адрес: www.artcraft.cz
Сообщений: 1,967
Записей в блоге: 6
Отправить сообщение для artcraft с помощью ICQ
"будет много писанины" пф...

Код AS3:
trace( pseudoRandom( [['apple', 1], ['lemon', 1], ['cherry', 2]] ) ); 
// 25% - яблоко, 25% - лимон, 50% - вишня
 
 
trace( pseudoRandom( [['apple', .1], ['lemon', .1], ['cherry', 1000]] ) ); 
// почти всегда вишня, но есть минимальный шанс словить яблоко или лимон
 
 
private function pseudoRandom(data:Array):*{
	var sum:Number = 0, n:Number = 0, i:Array, r:Number = Math.random();
	for each(i in data) { sum += i[1]; }
	for each(i in data) { n += i[1] / sum; if (r <= n) return i[0];}
	return null;
}
если надо еще 20 фруктов просто добавьте их в массив

Добавлено через 30 минут
методом который предлагает партизан будет трудно организовать шанс 1 : 100000000 или 1 : 0.0697602774
а вот моей функцией запросто
__________________
Хороший отдых - половина работы.


Последний раз редактировалось artcraft; 03.06.2012 в 16:21.
Старый 03.06.2012, 16:46
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
[redacted]

Упс, не туда посмотрел, я не сразу понял, как сума считается, сорри.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 03.06.2012 в 16:53.
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:48.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 03:48.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.