randomly order a list

Richard Gaskin ambassador at fourthworld.com
Thu May 23 14:40:31 CDT 2013


Björnke von Gierke wrote:

 > sort the lines of theList by random(the number of lines in theList)
 >
 > This too works. there's no need to make an arbitrary large number
 > _BECAUSE IT MIGHT IN SOME CASES DECREASE RANDOMNESS_. Mostly when
 > your variable grows bigger then anticipated, so usually you're fine.
 > But still, don't use arbitrary magic numbers, it's just bad coding
 > habits.

Surprisingly, it does seem to improve the distribution of results to use 
a large value in the argument to random.

While waiting for a backup here I took a couple minutes to test the 
options presented in this discussion in a stack:

   go url "http://fourthworld.net/lc/RandomSort.rev"

It turns out that both my crude manual-like method and using a large 
value for random produce far more even distributions of results than 
using random with the number of lines in the list.

In fact, as you'll see in that stack (unless I goofed in tossing it 
together so quickly - please check the card script for the functions and 
let me know if I screwed up) it seems that we get the same results 
scoring most-frequent and less-frequent when using the number of lines 
of the list, while the other two methods vary the most- and 
least-frequent pretty much evenly across the range of possible solutions.

I'm not sure why this is the case, and while I'm reluctant to call it a 
"bug" it may well be an "anomaly". :)

But by any name, useful to know.

And for those perverse souls obsessed with performance, the crude method 
I posted earlier also turns out to be ever so slightly faster than using 
the random function.  The difference isn't significant, and of course 
random is the better choice for longer lists, but once again it reminds 
us that LiveCode is seductive this way, that the number of lines we type 
rarely tells us much about how hard the engine needs to work under the 
hood.  RegEx vs. pull parsers is another example, and there are many 
others to discover for when performance is critical.


 > As for the original poster: DO NOT SET THE RANDOMSEED!!!!

...unless what you're looking for is a reproducible set of 
random-seeming results.  Setting the randomSeed to a given value will 
deliver a reasonable distribution of results, but each time you run the 
same code with the same randomSeed you'll get the exact same results. 
If that's what you're after, it's useful to know, but of course for most 
normal uses of the random function setting the randomSeed will not be 
what you're after.

--
  Richard Gaskin
  Fourth World
  LiveCode training and consulting: http://www.fourthworld.com
  Webzine for LiveCode developers: http://www.LiveCodeJournal.com
  Follow me on Twitter:  http://twitter.com/FourthWorldSys



More information about the use-livecode mailing list