
TOMBOLA!! randomize text waves, excellent to choose the presenter or make a cookies list for lab meetings

awirsing
// ***TOMBOLA!!!*** // TOMBOLA!!! randomize the text wave "lista" in the wave "resultado" // excelent to choose the presenter or cookies list for the lab seminars // Germán Fernández, <a href="mailto:gfernandez@uchile.cl" rel="nofollow">gfernandez@uchile.cl</a>, @2012 Function Tombola(lista) Wave/T lista variable i,j,k string comp Make/T/O/N=(numpnts(lista)) resultado="" do j=round(abs((enoise( (numpnts(lista) -1) ) ) ) ) comp=lista[j] k=check(resultado,comp) if (k==1) resultado[i]=comp i+=1 endif while (i<(numpnts(lista))) end Function check(onda,busca) wave onda string busca FindValue/S=0 /TEXT=busca/TXOP=1 onda if (V_value==(-1)) return 1 else return 0 endif end
s.r.chinn's reply was also gone:
Here is an alternate approach that can be modified to randomize the order of ANY type of wave. The idea is to use a randomized index permutation wave as a sort key. No string comparisons are necessary. As above, a new re-ordered wave is created, but the input could also be re-ordered in place.
function SortNames(inList) // re-orders input text wave by randomized sort key wave/T inList variable Npts = numPnts(inList) string outName = NameofWave(inList)+"_R" Duplicate/O inList, $outName // make new wave for re-ordered list WAVE outList = $outName shuffle(Npts) // create random sort key WAVE wPerm IndexSort wPerm, outList // re-arrange the output list entries end function shuffle(Npts) // perform a random permutation of indices 0...Npts-1 variable Npts make/O/N=(Npts) wPerm = p // will be used as sort key variable i, j, temp for(i=Npts-1; i>0; i-=1) temp = wPerm[i] j = round( i/2+enoise(i/2) ) // pick random index from remaining choices wPerm[i] = wPerm[j] // swap entries wPerm[j] = temp endfor end
For information on random shuffling, see http://en.wikipedia.org/wiki/Knuth_shuffle.
And here is what I actually wanted to add as another approach:
•make/n=(numpnts(lista))/o keyw=abs(enoise(1)) •duplicate/o lista resultado •sort keyw resultado
A

Forum

Support

Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More
I hate to be too picky, but in theory doesn't assigning any random values to elements of
keyw
allow for duplication of values? Extremely unlikely, but theoretically possible. How random is the sorting then ifkeyw
may have some equal values?My method constrains the random choices among remaining sort indices, not permitting index duplication.
August 10, 2012 at 09:03 am - Permalink
s.r.chinn, i found very interesting your comment, if well this sniplet was writen just as a need of some method to sort our lab meetings could be a good method to "random sort" of text waves.
thanks for your comments.
Germán.
September 4, 2012 at 11:23 am - Permalink