# shuffle of @array in place

sub fisher_yates_shuffle {

$array = shift;

$i;

for ($i = @$array; --$i; ) {

$j = int random(0,$i+1);

next if $i == $j;

@$array[$i,$j] = @$array[$j,$i];

}

}

that shuffles the following array of values

$ohmD = "{\rm \Omega}";

$ohmU = "ohm";

$ampD = "{\rm A}";

$ampU = "amp";

$voltD = "{\rm V}";

$voltU = "volt";

@valArr = (#

["V_0",$V_0val,$voltD,$voltU],#

["I_0",$I_0val,$ampD,$ampU],#

["I_1",$I_1val,$ampD,$ampU],#

["I_2",$I_2val,$ampD,$ampU],#

["R_1",$R_1val,$ohmD,$ohmU],#

["R_2",$R_2val,$ohmD,$ohmU]#

);

I shuffle the array then pop off the last three sub arrays and push onto another array. This so called unknown array @valArr_unkn contains the values the students are asked to calculate. This is done with the following code

fisher_yates_shuffle( ~~@valArr ); # permutes array in place

# pop of last three values of known and push onto unknown array

@valArr_unkn = ();

$size = scalar @valArr_unkn;

while ($size < 3) {

@popped = pop(@valArr);

push(@valArr_unkn, @popped);

$size = scalar @valArr_unkn;

}

whilst this works "most" of the time, for one particular random seed (20109 and I'm sure others), $valArr_unkn[0] and $valArr_unkn[2] contain the four values under the sub-indices 0-3, but the four values of $valArr_unkn[1] are empty leading to errors.

What might be wrong? How might I fix it?

Thanks in advance for any help with this

Regards,

Zak