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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.01.2012, 16:32
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 31  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
fish_r а у массива есть свойство indexOf ? или я что то не так понял...
__________________
Марк Tween

Старый 30.01.2012, 17:00
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 32  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
http://help.adobe.com/ru_RU/FlashPla...t/3/Array.html
__________________
Кодинг, багинг, алгоритминг. me @

Старый 30.01.2012, 17:07
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 33  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
угу вижу. просто никогда не пользовался
__________________
Марк Tween

Старый 30.01.2012, 19:16
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 34  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Сообщение от wvxvw Посмотреть сообщение
Все равно, зачем 2 раза рандом вызывать?
..
ОК, вопрос снимается
а ведь ты прав, можно и с одним
Код AS3:
public function random(min:int, max:int, except:int):int
{
	var random:Number = Math.random();
	var ratio:Number = (except - min) / (max - min);
 
	if (random < ratio )
	{
		return min + int(random / ratio * (except - min));
	}
	else
	{
		return max - int((1 - random) / (1 - ratio) * (max - except));
	}
}

Старый 30.01.2012, 19:43
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 35  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
Тест на скорость и качество рандома, брались целые числа от 0 до 30 включительно, исключалось 5
Код AS3:
random1 ---------
0  =>  333440 0.0333
1  =>  332597 0.0333
2  =>  333305 0.0333
3  =>  332736 0.0333
4  =>  332711 0.0333
6  =>  334101 0.0334
7  =>  333831 0.0334
8  =>  332383 0.0332
9  =>  332962 0.0333
10  =>  332951 0.0333
11  =>  332498 0.0332
12  =>  333338 0.0333
13  =>  333087 0.0333
14  =>  333810 0.0334
15  =>  333477 0.0333
16  =>  333979 0.0334
17  =>  333544 0.0334
18  =>  333990 0.0334
19  =>  333006 0.0333
20  =>  334569 0.0335
21  =>  333063 0.0333
22  =>  332528 0.0333
23  =>  334435 0.0334
24  =>  332408 0.0332
25  =>  333202 0.0333
26  =>  333793 0.0334
27  =>  333052 0.0333
28  =>  334687 0.0335
29  =>  332766 0.0333
30  =>  333751 0.0334
max: 0.0335
min: 0.0332
time 5104
random2 ---------
0  =>  333387 0.0333
1  =>  333269 0.0333
2  =>  334142 0.0334
3  =>  332735 0.0333
4  =>  333304 0.0333
6  =>  334511 0.0335
7  =>  332390 0.0332
8  =>  333775 0.0334
9  =>  333638 0.0334
10  =>  334384 0.0334
11  =>  331774 0.0332
12  =>  333715 0.0334
13  =>  332765 0.0333
14  =>  333892 0.0334
15  =>  332855 0.0333
16  =>  333543 0.0334
17  =>  333384 0.0333
18  =>  333845 0.0334
19  =>  333176 0.0333
20  =>  333791 0.0334
21  =>  333333 0.0333
22  =>  333266 0.0333
23  =>  333152 0.0333
24  =>  333917 0.0334
25  =>  332545 0.0333
26  =>  332034 0.0332
27  =>  332994 0.0333
28  =>  333013 0.0333
29  =>  333907 0.0334
30  =>  333564 0.0334
max: 0.0335
min: 0.0332
time 4653
random3 ---------
0  =>  1667509 0.1668
6  =>  399696 0.04
7  =>  399660 0.04
8  =>  400894 0.0401
9  =>  399009 0.0399
10  =>  399507 0.04
11  =>  399832 0.04
12  =>  399777 0.04
13  =>  399750 0.04
14  =>  399956 0.04
15  =>  399588 0.04
16  =>  401202 0.0401
17  =>  399070 0.0399
18  =>  400281 0.04
19  =>  399702 0.04
20  =>  400266 0.04
21  =>  400008 0.04
22  =>  399781 0.04
23  =>  400112 0.04
24  =>  401127 0.0401
25  =>  399899 0.04
26  =>  333374 0.0333
max: 0.1668
min: 0.0333
time 4233
Код AS3:
function result(method:Function):void
{
	dic = new Dictionary();
	time = getTimer();
 
	for (i = 0; i < maxit; i++)
	{
		n = method(0,30,5);
		dic[n] ||=  0;
		dic[n]++;
	}
 
	var max:Number = 0;
	var min:Number = 30;
	var k:Number = 0;
 
	for (key in dic)
	{
		k = Math.round(dic[key] / maxit * 10000) / 10000;
		max = Math.max(max,k);
		min = Math.min(min,k);
		trace(key, " => ", dic[key], k);
	}
 
	trace("max:", max);
	trace("min:", min);
	trace("time", getTimer() - time);
}
 
var dic:Dictionary;
var i:int;
var n:int;
var key:String;
var time:uint;
var maxit:int = 10000000;
 
function random1(min:int, max:int, except:int):int
{
	if (Math.random() < (except - min) / (max - min))
	{
		return min + int(Math.random() * (except - min));
	}
	else
	{
		return max - int(Math.random() * (max - except));
	}
}
 
trace("random1 ---------");
result(random1);
 
 
function random2(min:int, max:int, except:int):Number
{
	max++;
	var rand:Number = min + int(Math.random() * (max - min - 1));
	return int(rand + Number(rand >= except));
}
 
trace("random2 ---------");
result(random2);
 
function random3(min:int, max:int, except:int):int
{
	var random:Number = Math.random();
 
	if (random < (except - min) / (max - min))
	{
		return min + int(random * (except - min));
	}
	else
	{
		return max - int(random * (max - except));
	}
}
 
trace("random3 ---------");
result(random3);

Старый 30.01.2012, 20:12
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 36  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
2й вариант в тесте будет еще быстрее, если его нормально записать
Код AS3:
function random2(min:int, max:int, except:int):int
{
	var rand:int = min + int(Math.random() * (max - min));
	return rand < except ? rand : ++rand;
}
а 3й должен быть в редакции из поста №34, иначе врет, выяснили уже ж

Старый 30.01.2012, 22:27
Korben вне форума Посмотреть профиль Отправить личное сообщение для Korben Найти все сообщения от Korben
  № 37  
Ответить с цитированием
Korben

Регистрация: Sep 2010
Сообщений: 14
Алгоритм раздачи случайного бонуса и т.п.

Я решал этот алгоритм по другому - создавался массив доступных чисел и потом удалялся случайный элемент.
Массив может жить долго с объектом и нет необходимости помнить какие числа надо игнорировать

Старый 30.01.2012, 22:29
firuz вне форума Посмотреть профиль Отправить личное сообщение для firuz Посетить домашнюю страницу firuz Найти все сообщения от firuz
  № 38  
Ответить с цитированием
firuz
 
Аватар для firuz

Регистрация: Feb 2010
Адрес: YcBvKFtbbu
Сообщений: 94
Отправить сообщение для firuz с помощью ICQ Отправить сообщение для firuz с помощью Skype™
А можно и рекурсией

Код AS3:
public function RecRand (_min:Number, _max:Number, _ex:Number) : Number {
			var ran:Number = Math.round(Math.random() * (_max - _min)) + _min;
			if (ran == _ex) {
				trace("Выбросить ", ran);
				return RecRand(_min, _max, _ex);
			}
 
 
			var ranNumb:Number = ran;
			return ranNumb
		}
__________________
[censored]
Фриланс


Последний раз редактировалось firuz; 30.01.2012 в 22:54.
Старый 30.01.2012, 23:53
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 39  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Цитата:
var ranNumb:Number = ran;
return ranNumb
Апокрефично
__________________
Марк Tween

Старый 31.01.2012, 00:43
firuz вне форума Посмотреть профиль Отправить личное сообщение для firuz Посетить домашнюю страницу firuz Найти все сообщения от firuz
  № 40  
Ответить с цитированием
firuz
 
Аватар для firuz

Регистрация: Feb 2010
Адрес: YcBvKFtbbu
Сообщений: 94
Отправить сообщение для firuz с помощью ICQ Отправить сообщение для firuz с помощью Skype™
Цитата:
Сообщение от in4core Посмотреть сообщение
Апокрефично
хахаха! я явно задумывал что-то дургое сначала! а потом забыл удалить
но ведь работает
__________________
[censored]
Фриланс

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:50.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Теги
random

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

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


 


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


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