Here's a very clean, fast and simple way to randomize an array.
array.sort(randomizeFunction);
function randomize(a:int, b:int):int
{
return int(Math.random() * 2) - 1;
}
If you're not happy with Math.random()'s randomness, there are plenty of other
random number generators out there,
Steven, sorry to contradict you, but although your code is simple and sort
of works, there a couple of problems with it.
First, the sorting function is wrong. A sorting function is supposed to
return -1,0 or 1. But it only returns -1 or 0.
The problem is you are coercing the result to int. You
You're right. I was careless on two counts.
Fisher-Yates it is.
On 5/9/2010 4:36 PM, Juan Pablo Califano wrote:
Steven, sorry to contradict you, but although your code is simple and sort
of works, there a couple of problems with it.
First, the sorting function is wrong. A sorting function is
PS 2: I think the correct way to write the function that returns a number in
the range -1 / 1 is:
Math.floor(Math.random * 3) - 1
In this case, you could indeed use int() instead of a static Math method, so
I guess I was wrong about your function needing a Math.round call.
2010/5/9 Juan Pablo
In the exception that Math.random() returns 1, in which case you would get 2.
I don't use Math.random(), though, I use the Parker-Miller PRNG.
On 5/9/2010 5:01 PM, Juan Pablo Califano wrote:
PS 2: I think the correct way to write the function that returns a number in
the range -1 / 1 is:
If that happens, it's a bug in the player. From the docs:
Returns a pseudo-random number n, where 0 = n 1.
So, the biggest number random returns can approximate 1, but should never be
1.
What I got wrong in my original answer was that multiplying by 2 and then
rounding introduces a bias
Hi,
here an alternative way of producing a random array:
/**
* Randomizes a copy of this array.
*/
public function randomize (pArray:Array):Array {
var newArray:Array = pArray.slice();
var i:Number = newArray.length;
while (i) {
var p:Number = random(i);
var t:Object =
ah my bad , i think this is probably the same as fisher yates;)
On Fri, May 7, 2010 at 12:20 PM, Hans Wichman
j.c.wich...@objectpainters.com wrote:
Hi,
here an alternative way of producing a random array:
/**
* Randomizes a copy of this array.
*/
public function randomize
I always use Fisher-Yates shuffle method to randomise an Array, which
yields more unbiased result.
http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle
My AS3 interpretation of Fisher-Yates is as follows; I can just call
this from anywhere in my scripts ;)
package utils {
public
...@chattyfig.figleaf.com
[mailto:flashcoders-boun...@chattyfig.figleaf.com] On Behalf Of
kennethkawam...@gmail.com
Sent: Thursday, May 06, 2010 5:03 AM
To: Flash Coders List
Subject: Re: [Flashcoders] Producing a random list with no repeats
I always use Fisher-Yates shuffle method to randomise an Array, which yields
I am working in ActionScript 2. I want to create a quiz in which 10 questions
are randomly selected from a block of 40 questions. I found the following code,
but I can't work out how to stop it doubling up the questions.
function randRange(min:Number, max:Number):Number {
var
It's probably best just to create an Array or Vector containing numbers 1 to
40. (Vectors are only available in AS3, not sure about Array). Shuffle the
array, then choose the first 10 elements. A reasonably effective way to shuffle
an array is to step through the array, and for each element
Hi Allen,
Just a thought, but maybe have the quiz numbers set in an array that
the var n:Number is retrieved and have the min and max that the
random code calls match the amount of items in the array.
After selecting a question, remove it from the array, thus the array
length (max) reduces
A simple way:
Put all the candidate numbers in a list (in this case, 1 to 40). Then pick
randomly from that array, one at the time, and make sure you remove that
number from the candidates list, so you can't have duplicates.
In code (untested):
function getRandomList():Array {
var
14 matches
Mail list logo