/    Sign up×
Community /Pin to ProfileBookmark

[RESOLVED] randomArray with exceptions

I need a some help with some code I’ve assembled from different websites.
I want to create an array of 3 random numbers between lets say 1 & 10 but with the exception or the exclusion of lets say 6.
My limited knowledge of functions, their parameters and loops prevent me for coming up with a solution, any advice would be greatly appreciated. Here’s what I’ve got so far:

[code]
var myNumArray = create_unique_random_array(3,10,5);

function create_unique_random_array(num_elements,max,current_pic) {

var temp, nums = new Array;

for (var element=0; element<num_elements; element++) {

//IMPORTANT: DON’T FORGET THE SEMI-COLON AT THE END
while((temp=number_found(randomizeMe(this,{maxNumber:max, exempt:current_pic),nums))==-1);

nums[element] = temp;
}

return (nums);
}

function number_found (random,number_array) {

for (var element=0; element<number_array.length; element++) {

if (random==number_array[element] ) {
return (-1);
}
}

return (random);
}

function randomizeMe(me, options){
var options = options || {}; // setup the options
var imExempt = options.exempt || null; // capture the exempt numbers
var maxNum = options.maxNumber || 0; // capture the maximum number to randomize
var rand_no = Math.floor(Math.random()*maxNum); // run the random numbers

if(imExempt != null){ // check to see if there are any exempt numbers
imExempt = imExempt.toString(); // turn the exemptions into a string
for(i=0; i <= maxNum; i++){ // loop throught the set number
if(imExempt.search(rand_no) != -1){ // check for exempt [INDENT][/INDENT]numbers
return randomizeMe(me, {exempt: imExempt, maxNumber: [INDENT][/INDENT]maxNum}); // start over
}
}
}
return rand_no;// return the new random number
}

document.write(myNumArray);
[/code]

to post a comment
JavaScript

5 Comments(s)

Copy linkTweet thisAlerts:
@KorOct 28.2009 — 
I want to create an array of 3 random numbers between lets say 1 & 10 but with the exception or the exclusion of lets say 6.[/QUOTE]

<i>
</i>&lt;script type="text/javascript"&gt;
var nrmax=3, limit=10, array=[], exception=6, nr;
for(var i=0;i&lt;nrmax;i++){
nr=Math.ceil(Math.random()*limit);
nr==exception?i--:array[array.length]=nr;
}
alert(array);
&lt;/script&gt;
Copy linkTweet thisAlerts:
@simpleAnswersauthorOct 28.2009 — Thanks for help Red Devil, but I also wanted every number in the array to be unique; I didn't want any duplications in it. Luckily I loaded the code I posted in Dreamweaver and I threw back an error on Line 12, I didn't close the randomizeMe parameter properly. I fixed it and the code works fine now :-)

I'll save your recommendation for future use, Thanks.

Here's the code for anyone who wants it:

[CODE]<script type="text/javascript">
var myNumArray = create_unique_random_array(3,20,[6,10]);

function create_unique_random_array(num_elements,maxNum,current_pic) {

var temp, nums = new Array;

for (var element=0; element<num_elements; element++) {

//IMPORTANT: DON'T FORGET THE SEMI-COLON AT THE END
while((temp=number_found(randomizeMe(this,{maxNumber:maxNum, exempt:current_pic}),nums))==-1);


nums[element] = temp;
}

return (nums);
}

function number_found (rand,number_array) {

for (var element=0; element<number_array.length; element++) {

if (rand==number_array[element] ) {
return (-1);
}
}

return (rand);
}
function randomizeMe(me, options){
var options = options || {}; // setup the options
var imExempt = options.exempt || null; // capture the exempt numbers
var maxNum = options.maxNumber || 0; // capture the maximum number to randomize
var rand_no = Math.ceil(Math.random()*maxNum); // run the random numbers

if(imExempt != null){ // check to see if there are any exempt numbers
imExempt = imExempt.toString(); // turn the exemptions into a string
for(i=0; i <= maxNum; i++){ // loop throught the set number
if(imExempt.search(rand_no) != -1){ // check for exempt numbers
return randomizeMe(me, {exempt: imExempt, maxNumber: maxNum}); // start over
}
}
}
return rand_no;// return the new random number
}

document.write(myNumArray);
</script>[/CODE]
Copy linkTweet thisAlerts:
@KorOct 28.2009 — Thanks for help Red Devil, but I also wanted every number in the array to be unique; I didn't want any duplications in it. [/QUOTE]
That's simple:
<i>
</i>function createRandomNumbers(){
var nrmax=3, limit=10, array=[], exception=6, nr, q, i, j;
for(i=0;i&lt;nrmax;i++){
q=false;
nr=Math.ceil(Math.random()*limit);
for(j=0; j&lt;array.length;j++){
if(nr==array[j]){q=true;break}
}
nr==exception||q?i--:array[array.length]=nr;
}
return array;
}
Copy linkTweet thisAlerts:
@simpleAnswersauthorOct 28.2009 — Thanks Kor

I fairly understand ur formula and it works fine plus its definitely superior to mine because of its simplicity, one thing I find a bit perplexing is :

nr==exception||q?i--:array[array.length]=nr;

Could you explain this bit of the code, is it regex or an if statment or both? This bit of the code baffles me!

...and if you have the time you could show me how to add more than one exception to your formula.

Thanks again
Copy linkTweet thisAlerts:
@KorOct 28.2009 — That's a [I]ternary[/I] operator/expression. A short cut for an if/else statement. The general syntax is
<i>
</i>[I]condition[/I][B][COLOR="Blue"]?[/COLOR][/B][I]statement_if_true[/I][B][COLOR="Blue"]:[/COLOR][/B][I]statement_if_false[/I];

The expression:
<i>
</i>nr==exception||q?i--:array[array.length]=nr;

is the short equivalent of:
<i>
</i>if(nr==exception||q){
i--;
}
else{
array[array.length]=nr;
}
×

Success!

Help @simpleAnswers spread the word by sharing this article on Twitter...

Tweet This
Sign in
Forgot password?
Sign in with TwitchSign in with GithubCreate Account
about: ({
version: 0.1.9 BETA 5.27,
whats_new: community page,
up_next: more Davinci•003 tasks,
coming_soon: events calendar,
social: @webDeveloperHQ
});

legal: ({
terms: of use,
privacy: policy
});
changelog: (
version: 0.1.9,
notes: added community page

version: 0.1.8,
notes: added Davinci•003

version: 0.1.7,
notes: upvote answers to bounties

version: 0.1.6,
notes: article editor refresh
)...
recent_tips: (
tipper: @AriseFacilitySolutions09,
tipped: article
amount: 1000 SATS,

tipper: @Yussuf4331,
tipped: article
amount: 1000 SATS,

tipper: @darkwebsites540,
tipped: article
amount: 10 SATS,
)...