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.