• Status: Solved
• Priority: Medium
• Security: Public
• Views: 157

# random words without repeating

# I have to select three random words three times

@animals=("cat", "rat", "bat");
@unselectedkeys=(0..2);

for(1..9)
{
if(@unselectedkeys==()){@unselectedkeys=(0..2)};

\$randomkey=int rand(@unselectedkeys);

print \$animals[\$unselectedkeys[\$randomkey]];

@unselectedkeys=grep{\$_!=\$randomkey}@unselectedkeys;
};
0
superquestions
1 Solution

Author Commented:
What I am trying to do is to select a random element from the array "animals" and keep track if I selected it so that I won't select it again.
0

Author Commented:
for(1..9){#instructions}

You can only modify the #instructions.
0

Author Commented:
# my debugging efforts

@animals=("cat", "rat", "bat");
@unselectedkeys=(0,1,2);

for(1..9)
{
# reset array when blank
if(@unselectedkeys==()){@unselectedkeys=(0..2)};

# select a random key
\$randomkey=int rand(@unselectedkeys);

# remove the selected key
@unselectedkeys=grep{\$_!=\$randomkey}@unselectedkeys;
};
0

Author Commented:
Why isn't the above script working properly?
0

Commented:
try changing

if(@unselectedkeys==()){@unselectedkeys=(0..2)};

to

if(\$unselectedkeys[0] eq ""){@unselectedkeys=(0..2)};

0

Commented:

the problem is that you can get a rand that is not a value in the array...
because you taking the rand on the length an array(1,2) could yeild a rand of 0, but if your array was 1 and 2, then nothing is going to be removed, hence your code fails:

I will see if I can get the grep working, but this is a working solution:

# my debugging efforts

@animals=("cat", "rat", "bat");
@unselectedkeys=(0,1,2);

for(1..9)
{
# reset array when blank
if(@unselectedkeys==()){@unselectedkeys=(0..2)};
print @unselectedkeys;
# select a random key
\$randomkey=int rand(1+\$#unselectedkeys);
# remove the selected key
for(\$i=0;\$i<=\$#unselectedkeys;\$i++)
{
if(\$i!=\$randomkey)
{
push @ok, \$unselectedkeys[\$i];
}
}
@unselectedkeys=@ok;
\$#ok=-1;
};

Bob
0

Commented:
perldoc -q "How do I shuffle an array randomly?"
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

## Featured Post

Tackle projects and never again get stuck behind a technical roadblock.