RANDSONG JavaScript (stand-alone) is a code insert that generates 4 random indexes used for selection of song names from the predefined sectioned song array representing song play list. RANDSONG.JS contains a sample of song name array definition and code for random indexes selection.
RANDSONG JavaScript is a stand-alone
one, which means that it s kept in a separate RANDSONG.JS file that gets
included into HTML <BODY> (normally at its start and always
after the the include defining the song array) using the following operator
(directory levelling may vary):
<SCRIPT LANGUAGE=JavaScript SRC=MIRZAYAN.JS></SCRIPT>
<SCRIPT LANGUAGE=JavaScript SRC=../RANDSONG.JS></SCRIPT>
Included JavaScript code is executed in place to generate random indexes
that are used for song selection in the HTML code below JavaScript insert.
Note: |
Before reading further you might want to look at explanation of the expression used to generate an integer random number within the specified range. |
<!-- Generate Indexes for Random Song Selection 07/27/1999–01/24/2001 --> <!-- ------------------------------------------------------ 01/24/2001 --> <!-- www.davar.net/RUSSIAN/SONGS/RANDSONG.JS --> <!-- Copyright (C) 1999–2001 by Vladimir Veytsel --> <!-- // RANDSONG is a code insert that is used to generate random indexes for // selection of song names from sectioned song list. // Code presumes that the array of song names is declared and initialized. // Two variables that split song list into three sections should have their // values assigned as in the example below: // S=new Array(9) // Song array (dynamically sized; starts from "0") // S[1]="Name_1" // S[2]="Name_2" // S[3]="Name_3"; Sect_1=3 // End of 1-st section // S[4]="Name_4" // S[5]="Name_5" // S[6]="Name_6" // S[7]="Name_7"; Sect_2=7 // End of 2-nd section // S[8]="Name_8" // S[9]="Name_9" // As a result of the execution of the code below four random indexes will be // generated to be used within HTML text for random song selection (using // "document.write"): // j0 Random index within entire list that differs from all 3 section indexes // i1 Random index within 1-st section // i2 Random index within 2-nd section // i3 Random index within 3-rd section // The exhaustive example of section indexes calculation from a random index // within the entire song array: // i0 1 2 3 4 5 6 7 8 9 Modulo Incr Range // -- - - - - - - - - - ------ ---- ----- // i1 2 3 1 2 3 1 2 3 1 % 3 +1 [1–3] // i2 5 6 7 4 5 6 7 4 5 %(7–3) +3+1 [4–7] // i3 9 8 9 8 9 8 9 8 9 %(9–7) +7+1 [8–9] // | | | // | | Last index of PREVIOUS section // | Last index of PREVIOUS section // Last index of CURRENT section // Warning: If the total number of names in the song list is three, // index "i0" will be equal to one of the section indexes. Sect_3=S.length-1 // End of 3-rd section and entire list i0=Math.floor(Math.random()*Sect_3)%Sect_3+1 i1=(i0% Sect_1)+1 // Random index within 1-st section i2=(i0%(Sect_2-Sect_1))+Sect_1+1 // Random index within 2-nd section i3=(i0%(Sect_3-Sect_2))+Sect_2+1 // Random index within 3-rd section // Random index within the entire list (differs from all 3 section indexes) if (Sect_3>3) // Prevent infinite cycle {Valid=false // Index valid flag while (!Valid) // Repeat until valid index is generated {i0=Math.floor(Math.random()*Sect_3)%Sect_3+1 Valid=(i0!=i1)&&(i0!=i2)&&(i0!=i3) } } //-->
RANDSONG JavaScript is a special case of a similar generalized RANDPROB.JS JavaScript, which performs the same task of random selection, but operates on a list divided into into any number of sections — a universal approach used for Go Problems list at this web site.