Diff for /loncom/homework/default_homework.lcpm between versions 1.51 and 1.63

version 1.51, 2002/09/26 20:45:00 version 1.63, 2003/06/07 03:52:39
Line 57  sub caparesponse_check { Line 57  sub caparesponse_check {
   #remove leading and trailing whitespace    #remove leading and trailing whitespace
   if ($response=~ /^\s|\s$/) {    if ($response=~ /^\s|\s$/) {
     $response=~ s:^\s+|\s+$::g;      $response=~ s:^\s+|\s+$::g;
     $message .="Removed ws now :$response:<br />";      $message .="Removed ws now :$response:\n";
   } else {    } else {
     $message .="no ws in :$response:<br />";      $message .="no ws in :$response:\n";
   }    }
   
     if (length($response) > 500) { return "TOO_LONG: Answer too long"; }
   
   if ($type eq '' ) {    if ($type eq '' ) {
     $message .= "Didn't find a type :$type:$expr: defaulting<br />";      $message .= "Didn't find a type :$type:$expr: defaulting\n";
     if ( $answer eq ($answer *1.0)) { $type = 2;      if ( $answer eq ($answer *1.0)) { $type = 2;
     } else { $type = 3; }      } else { $type = 3; }
   } else {    } else {
Line 82  sub caparesponse_check { Line 84  sub caparesponse_check {
   #formula type setup the sample points    #formula type setup the sample points
   if ($type eq '8') {    if ($type eq '8') {
     ($id_list,$points)=split(/@/,$samples);      ($id_list,$points)=split(/@/,$samples);
     $message.="Found :$points: points<br />";      $message.="Found :$id_list:$points: points in $samples\n";
   }    }
   if ($tol eq '') {    if ($tol eq '') {
     $tol=0.0;      $tol=0.0;
Line 101  sub caparesponse_check { Line 103  sub caparesponse_check {
     $sig_ubound =15; #SIG_UB_DEFAULT      $sig_ubound =15; #SIG_UB_DEFAULT
   } else {    } else {
     ($sig_lbound,$sig_ubound) = split /,/,$sig;      ($sig_lbound,$sig_ubound) = split /,/,$sig;
     if (!$sig_lbound) {      if (!defined($sig_lbound)) {
       $sig_lbound = 0; #SIG_LB_DEFAULT        $sig_lbound = 0; #SIG_LB_DEFAULT
       $sig_ubound =15; #SIG_UB_DEFAULT        $sig_ubound =15; #SIG_UB_DEFAULT
     }      }
     if (!$sig_ubound) { $sig_ubound=$sig_lbound; }      if (!defined($sig_ubound)) { $sig_ubound=$sig_lbound; }
   }    }
   my $result = &caparesponse_capa_check_answer($response,$answer,$type,    my $result = &caparesponse_capa_check_answer($response,$answer,$type,
        $tol_type,$tol,         $tol_type,$tol,
Line 127  sub caparesponse_check { Line 129  sub caparesponse_check {
   elsif ($result =='12') { $result='WANTED_NUMERIC'; }    elsif ($result =='12') { $result='WANTED_NUMERIC'; }
   else  {$result = "ERROR: Unknown Result:$result:$@:";}    else  {$result = "ERROR: Unknown Result:$result:$@:";}
   
   return "$result:<br />Error $error:<br />Answer $answer:<br />Response $response:<br /> type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|<br />$message$expr";    return "$result:\nError $error:\nAnswer $answer:\nResponse $response:\n type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|\n$message$expr";
 }  }
   
 sub get_array_args {  sub get_array_args {
   my ($expr,$arg)=@_;    my ($expr,$arg)=@_;
   # do these first, because who knows what varname the instructor might have used    # do these first, because who knows what varname the instructor might have used
   # but it probably isn't $CAPARESPONSE_CHECK_LIST_answer    # but it probably isn't $CAPARESPONSE_CHECK_LIST_answer
   my $CAPARESPONSE_CHECK_LIST_answer = eval $expr.';return $'.$arg; #'    my $CAPARESPONSE_CHECK_LIST_answer = eval $expr.';return $'.$arg; #' stupid emacs
   my $GET_ARRAY_ARGS_result;    my $GET_ARRAY_ARGS_result;
   my @GET_ARRAY_ARGS_list;    my @GET_ARRAY_ARGS_list;
   if ($CAPARESPONSE_CHECK_LIST_answer =~ /^\s*[\$\@]/) {    if ($CAPARESPONSE_CHECK_LIST_answer =~ /^\s*[\$\@]/) {
     (@GET_ARRAY_ARGS_list) = eval $CAPARESPONSE_CHECK_LIST_answer;      (@GET_ARRAY_ARGS_list) = eval $CAPARESPONSE_CHECK_LIST_answer;
   }    }
   $GET_ARRAY_ARGS_result.="error:$@:<br />";    $GET_ARRAY_ARGS_result.="error:$@:\n";
   # if the eval fails just use what is in the answer exactly    # if the eval fails just use what is in the answer exactly
   if (!defined(@GET_ARRAY_ARGS_list) || !defined($GET_ARRAY_ARGS_list[0])) {    if (!(@GET_ARRAY_ARGS_list) || !defined($GET_ARRAY_ARGS_list[0])) {
     $GET_ARRAY_ARGS_result.="list zero is undefined<br />";      $GET_ARRAY_ARGS_result.="list zero is undefined\n";
     $GET_ARRAY_ARGS_list[0]=$CAPARESPONSE_CHECK_LIST_answer;      $GET_ARRAY_ARGS_list[0]=$CAPARESPONSE_CHECK_LIST_answer;
   }    }
   return $GET_ARRAY_ARGS_result,@GET_ARRAY_ARGS_list;    return $GET_ARRAY_ARGS_result,@GET_ARRAY_ARGS_list;
Line 151  sub get_array_args { Line 153  sub get_array_args {
   
 sub caparesponse_check_list {  sub caparesponse_check_list {
   my ($response,$expr)=@_;    my ($response,$expr)=@_;
   my $result;    $expr =~ s/\\/\\\\/g;
     $expr =~ s/\'/\\\'/g;
   my ($result,@list) = &get_array_args($expr,'answer');    my ($result,@list) = &get_array_args($expr,'answer');
     $expr =~ s/\\\'/\'/g;
     $expr =~ s/\\\\/\\/g;
   my $aresult='';    my $aresult='';
   my $current_answer;    my $current_answer;
   my $answers=join(':',@list);    my $answers=join(':',@list);
   $result.="Got response :$answers:<br />";    $result.="Got response :$answers:\n";
   my @responselist;    my @responselist;
   my $type =eval $expr.';return $answer;';    my $type =eval $expr.';return $answer;';
   if ($type ne '' && $#list > 0) {    if ($type ne '' && $#list > 0) {
Line 165  sub caparesponse_check_list { Line 170  sub caparesponse_check_list {
     (@responselist)=($response);      (@responselist)=($response);
   }    }
   my $unit='';    my $unit='';
   $result.="Initial final response :$responselist['-1']:<br />";    $result.="Initial final response :$responselist['-1']:\n";
   if ($type eq '') {    if ($type eq '') {
     #for numerical problems split off the unit      #for numerical problems split off the unit
     if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) {      if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) {
Line 173  sub caparesponse_check_list { Line 178  sub caparesponse_check_list {
       $unit=$2;        $unit=$2;
     }      }
   }    }
   $result.="Final final response :$responselist['-1']:<br />";    $result.="Final final response :$responselist['-1']:\n";
   $result.=":$#list: answers<br />";    $result.=":$#list: answers\n";
   $unit=~s/\s//;    $unit=~s/\s//;
   my $i=0;    my $i=0;
   my $awards='';    my $awards='';
   for ($i=0; $i<@list;$i++) {    for ($i=0; $i<@list;$i++) {
     $result.="trying answer :$list[$i]:<br />";      $result.="trying answer :$list[$i]:\n";
       my $thisanswer=$list[$i];
       $thisanswer=~ s/\\/\\\\/g;
       $thisanswer =~ s/\'/\\\'/g;
     if ($unit eq '') {      if ($unit eq '') {
       $aresult=&caparesponse_check($responselist[$i],        $aresult=&caparesponse_check($responselist[$i],
      $expr.';my $answer=\''.$list[$i].'\';');       $expr.';my $answer=\''.$thisanswer.'\';');
     } else {      } else {
       $aresult=&caparesponse_check($responselist[$i]." $unit",        $aresult=&caparesponse_check($responselist[$i]." $unit",
    $expr.';my $answer=\''.$list[$i].'\';');     $expr.';my $answer=\''.$thisanswer.'\';');
     }      }
     my ($temp)=split /:/, $aresult;      my ($temp)=split /:/, $aresult;
     $awards.="$temp,";      $awards.="$temp,";
     $result.=$aresult;      $result.=$aresult;
   }    }
   chop $awards;    chop $awards;
   return "$awards:<br />$result";    return "$awards:\n$result";
 }  }
   
 sub tex {  sub tex {
   if ( $external::target eq "tex" ) {    if ( $external::target eq "tex" ) {
     return @_[0];      return $_[0];
   } else {    } else {
     return @_[1];      return $_[1];
   }    }
 }  }
   
 sub var_in_tex {  sub var_in_tex {
   if ( $external::target eq "tex" ) {    if ( $external::target eq "tex" ) {
     return @_[0];      return $_[0];
   } else {    } else {
     return "";      return "";
   }    }
Line 213  sub var_in_tex { Line 221  sub var_in_tex {
   
 sub web {  sub web {
   if ( $external::target eq "tex" ) {    if ( $external::target eq "tex" ) {
     return @_[1];      return $_[1];
   } else {    } else {
     if ( $external::target eq "web" || $external::target eq "answer") {      if ( $external::target eq "web" || $external::target eq "answer") {
       return @_[2];        return $_[2];
     } else {      } else {
       return @_[0];        return $_[0];
     }      }
   }    }
 }  }
Line 229  sub html { Line 237  sub html {
   }    }
 }  }
   
 sub problem {  
   return '1';  
 }  
   
 sub hinton {  sub hinton {
   return 0;    return 0;
 }  }
   
 sub random {  sub random {
   my ($start,$end,$step)=@_;      my ($start,$end,$step)=@_;
   if ( ! $hidden::RANDOMINIT ) {      if ( ! $hidden::RANDOMINIT ) {
     &random_set_seed_from_phrase($external::randomseed);   if ($external::randomseed == 0) { $external::randomseed=1; }
     $hidden::RANDOMINIT=1;   if ($external::randomseed =~/,/) {
   }      my ($num1,$num2)=split(/,/,$seed);
   if (!defined($step)) { $step=1; }      &random_set_seed(abs($num1),abs($num2));
   my $num=1+int(($end-$start)/$step);   } else {
   my $result=$start + int(&math_random_uniform() * $num)*$step;      &random_set_seed(1,int(abs($external::randomseed)));
   return $result;   }
    &math_random_uniform();
    $hidden::RANDOMINIT=1;
       }
       if (!defined($step)) { $step=1; }
       my $num=1+int(($end-$start)/$step);
       my $result=$start + int(&math_random_uniform() * $num)*$step;
       return $result;
 }  }
   
 sub random_normal {  sub random_normal {
Line 417  sub log { log(shift) } Line 428  sub log { log(shift) }
 sub atan2 { atan2($_[0],$_[1]) }  sub atan2 { atan2($_[0],$_[1]) }
 sub sqrt { sqrt(shift) }  sub sqrt { sqrt(shift) }
   
 sub tan  { sin($_[0]) / cos($_[0]) }  sub tan  { CORE::sin($_[0]) / CORE::cos($_[0]) }
 #sub atan { atan2($_[0], 1); }  #sub atan { atan2($_[0], 1); }
 #sub acos { atan2(sqrt(1 - $_[0] * $_[0]), $_[0] ); }  #sub acos { atan2(sqrt(1 - $_[0] * $_[0]), $_[0] ); }
 #sub asin { atan2($_[0], sqrt(1- $_[0] * $_[0]) );  }  #sub asin { atan2($_[0], sqrt(1- $_[0] * $_[0]) );  }
   
 sub log10 { log($_[0])/log(10); }  sub log10 { CORE::log($_[0])/CORE::log(10); }
   
 sub factorial {  sub factorial {
     my $input = int(shift);      my $input = CORE::int(shift);
     return "Error - unable to take factorial of an negative number ($input)" if $input < 0;      return "Error - unable to take factorial of an negative number ($input)" if $input < 0;
     return "Error - factorial result is greater than system limit ($input)" if $input > 170;      return "Error - factorial result is greater than system limit ($input)" if $input > 170;
     return 1 if $input == 0;      return 1 if $input == 0;
Line 468  sub sub_string { Line 479  sub sub_string {
 }  }
   
 sub pow   {return $_[0] ** $_[1]; }  sub pow   {return $_[0] ** $_[1]; }
 sub ceil  {return (($_[0]-int($_[0]))== 0.0) ? $_[0] : (($_[0] > 0) ? (int($_[0])+ 1) : int($_[0])); }  sub ceil  {return (($_[0]-CORE::int($_[0]))== 0.0) ? $_[0] : (($_[0] > 0) ? (CORE::int($_[0])+ 1) : CORE::int($_[0])); }
 sub floor  {return (($_[0]-int($_[0]))== 0.0) ? $_[0] : (($_[0] > 0) ? int($_[0]) : (int($_[0])-1)); }  sub floor  {return (($_[0]-CORE::int($_[0]))== 0.0) ? $_[0] : (($_[0] > 0) ? CORE::int($_[0]) : (CORE::int($_[0])-1)); }
 #sub floor {return int($_[0]); }  #sub floor {return int($_[0]); }
   
 sub format {  sub format {
Line 565  sub map { Line 576  sub map {
     }      }
  }   }
     }      }
     &random_set_seed(@seed);      &random_set_seed(@oldseed);
     return '';      return '';
 }  }
   
Line 712  sub array_moments { Line 723  sub array_moments {
     $kurt+=$x**4;      $kurt+=$x**4;
   }    }
   $output[2]=$var/($N-1);    $output[2]=$var/($N-1);
   $sdev=sqrt($output[2]);    $sdev=CORE::sqrt($output[2]);
   if ($sdev == 0) {    if ($sdev == 0) {
      $output[3]="inf-variance=0";       $output[3]="inf-variance=0";
      $output[4]="inf-variance=0";       $output[4]="inf-variance=0";

Removed from v.1.51  
changed lines
  Added in v.1.63


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>