[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]) {