--- loncom/homework/response.pm 2005/04/04 10:04:09 1.118 +++ loncom/homework/response.pm 2005/04/04 18:14:58 1.119 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # various response type definitons response definition # -# $Id: response.pm,v 1.118 2005/04/04 10:04:09 foxr Exp $ +# $Id: response.pm,v 1.119 2005/04/04 18:14:58 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -119,22 +119,34 @@ sub setrandomnumber { # $rndseed=unpack("%32i",$rndseed); my $rand_alg=&Apache::lonnet::get_rand_alg(); my $rndmod; - if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' || - $rand_alg eq '64bit2') { - $rndmod=(&Apache::lonnet::numval($Apache::inputtags::part) << 10); + + my ($id1,$id2,$shift_amt); + if ($Apache::lonhomework::parsing_a_problem) { + $id1=$Apache::inputtags::part; if (defined($Apache::inputtags::response[-1])) { - $rndmod+=&Apache::lonnet::numval($Apache::inputtags::response[-1]); + $id2=$Apache::inputtags::response[-1]; } - } elsif ($rand_alg eq '64bit3') { - $rndmod=(&Apache::lonnet::numval2($Apache::inputtags::part) << 10); - if (defined($Apache::inputtags::response[-1])) { - $rndmod+=&Apache::lonnet::numval2($Apache::inputtags::response[-1]); + $shift_amt=scalar(@Apache::inputtags::responselist); + } elsif ($Apache::lonhomework::parsing_a_task) { + $id1=$Apache::bridgetask::dimension; + if (defined($Apache::bridgetask::instance[-1])) { + $id2=$Apache::bridgetask::instance[-1]; } + $shift_amt=scalar(@Apache::bridgetask::instance); + } + &Apache::lonxml::debug("id1: $id1, id2: $id2, shift_amt: $shift_amt"); + if (!$rand_alg || $rand_alg eq '32bit' || $rand_alg eq '64bit' || + $rand_alg eq '64bit2') { + $rndmod=(&Apache::lonnet::numval($id1) << 10); + if (defined($id2)) { $rndmod+=&Apache::lonnet::numval($id2); } + } elsif ($rand_alg eq '64bit3') { + $rndmod=(&Apache::lonnet::numval2($id1) << 10); + if (defined($id2)) { $rndmod+=&Apache::lonnet::numval2($id2); } } else { - my $shift=(4*scalar(@Apache::inputtags::responselist))%30; - $rndmod=(&Apache::lonnet::numval3($Apache::inputtags::part) << (($shift+15)%30)); - if (defined($Apache::inputtags::response[-1])) { - $rndmod+=(&Apache::lonnet::numval3($Apache::inputtags::response[-1]) << $shift ); + my $shift=(4*$shift_amt)%30; + $rndmod=(&Apache::lonnet::numval3($id1) << (($shift+15)%30)); + if (defined($id2)) { + $rndmod+=(&Apache::lonnet::numval3($id2) << $shift ); } } if ($rndseed =~/([,:])/) {