[LON-CAPA-cvs] cvs: rat / lonuserstate.pm
albertel
lon-capa-cvs@mail.lon-capa.org
Fri, 21 Feb 2003 23:01:48 -0000
albertel Fri Feb 21 18:01:48 2003 EDT
Modified files:
/rat lonuserstate.pm
Log:
- converted to use the non-perl random number generator
- randomness more stable, keys off the second number in the rid not the first
Index: rat/lonuserstate.pm
diff -u rat/lonuserstate.pm:1.49 rat/lonuserstate.pm:1.50
--- rat/lonuserstate.pm:1.49 Mon Feb 3 13:03:53 2003
+++ rat/lonuserstate.pm Fri Feb 21 18:01:48 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Construct and maintain state and binary representation of course for user
#
-# $Id: lonuserstate.pm,v 1.49 2003/02/03 18:03:53 harris41 Exp $
+# $Id: lonuserstate.pm,v 1.50 2003/02/21 23:01:48 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -417,23 +417,26 @@
my $mpc=$hash{'map_pc_'.$hash{'src_'.$rid}};
# ------------------------------------------- put existing resources into array
my @currentrids=();
- foreach (keys %hash) {
+ foreach (sort(keys(%hash))) {
if ($_=~/^src_($mpc\.\d+)/) {
if ($hash{'src_'.$1}) { push @currentrids, $1; }
}
}
+ # rids are number.number and we want to numercially sort on
+ # the second number
+ @currentrids=sort {
+ my (undef,$aid)=split(/\./,$a);
+ my (undef,$bid)=split(/\./,$b);
+ $aid <=> $bid;
+ } @currentrids;
next if ($#currentrids<$rndpick);
# -------------------------------- randomly eliminate the ones that should stay
- srand(&Apache::lonnet::rndseed($rid)); # use rid instead of symb
- for (my $i=1;$i<=$rndpick;$i++) {
- while (1) {
- my $randomidx=int(rand($#currentrids+1));
- if ($currentrids[$randomidx]) {
- $currentrids[$randomidx]='';
- last;
- }
- }
- }
+ my (undef,$id)=split(/\./,$rid);
+ my $rndseed=&Apache::lonnet::rndseed($id); # use id instead of symb
+ &Math::Random::random_set_seed_from_phrase($rndseed);
+ my @whichids=&Math::Random::random_permuted_index($#currentrids+1);
+ for (my $i=1;$i<=$rndpick;$i++) { $currentrids[$whichids[$i]]=''; }
+ #&Apache::lonnet::logthis("$id,$rndseed,".join(':',@whichids));
# -------------------------------------------------------- delete the leftovers
for (my $k=0; $k<=$#currentrids; $k++) {
if ($currentrids[$k]) {