--- loncom/homework/default_homework.lcpm 2002/09/26 20:45:00 1.51 +++ loncom/homework/default_homework.lcpm 2003/03/25 22:53:22 1.58 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # used by lonxml::xmlparse() as input variable $safeinit to Apache::run::run() # -# $Id: default_homework.lcpm,v 1.51 2002/09/26 20:45:00 albertel Exp $ +# $Id: default_homework.lcpm,v 1.58 2003/03/25 22:53:22 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -57,13 +57,13 @@ sub caparesponse_check { #remove leading and trailing whitespace if ($response=~ /^\s|\s$/) { $response=~ s:^\s+|\s+$::g; - $message .="Removed ws now :$response:
"; + $message .="Removed ws now :$response:\n"; } else { - $message .="no ws in :$response:
"; + $message .="no ws in :$response:\n"; } if ($type eq '' ) { - $message .= "Didn't find a type :$type:$expr: defaulting
"; + $message .= "Didn't find a type :$type:$expr: defaulting\n"; if ( $answer eq ($answer *1.0)) { $type = 2; } else { $type = 3; } } else { @@ -82,7 +82,7 @@ sub caparesponse_check { #formula type setup the sample points if ($type eq '8') { ($id_list,$points)=split(/@/,$samples); - $message.="Found :$points: points
"; + $message.="Found :$points: points\n"; } if ($tol eq '') { $tol=0.0; @@ -101,11 +101,11 @@ sub caparesponse_check { $sig_ubound =15; #SIG_UB_DEFAULT } else { ($sig_lbound,$sig_ubound) = split /,/,$sig; - if (!$sig_lbound) { + if (!defined($sig_lbound)) { $sig_lbound = 0; #SIG_LB_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, $tol_type,$tol, @@ -127,7 +127,7 @@ sub caparesponse_check { elsif ($result =='12') { $result='WANTED_NUMERIC'; } else {$result = "ERROR: Unknown Result:$result:$@:";} - return "$result:
Error $error:
Answer $answer:
Response $response:
type-$type|$tol|$tol_type|$sig:$sig_lbound:$sig_ubound|$unit|
$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 { @@ -140,10 +140,10 @@ sub get_array_args { if ($CAPARESPONSE_CHECK_LIST_answer =~ /^\s*[\$\@]/) { (@GET_ARRAY_ARGS_list) = eval $CAPARESPONSE_CHECK_LIST_answer; } - $GET_ARRAY_ARGS_result.="error:$@:
"; + $GET_ARRAY_ARGS_result.="error:$@:\n"; # if the eval fails just use what is in the answer exactly if (!defined(@GET_ARRAY_ARGS_list) || !defined($GET_ARRAY_ARGS_list[0])) { - $GET_ARRAY_ARGS_result.="list zero is undefined
"; + $GET_ARRAY_ARGS_result.="list zero is undefined\n"; $GET_ARRAY_ARGS_list[0]=$CAPARESPONSE_CHECK_LIST_answer; } return $GET_ARRAY_ARGS_result,@GET_ARRAY_ARGS_list; @@ -152,11 +152,13 @@ sub get_array_args { sub caparesponse_check_list { my ($response,$expr)=@_; my $result; + $expr =~ s/\\/\\\\/g; + $expr =~ s/\'/\\\'/g; my ($result,@list) = &get_array_args($expr,'answer'); my $aresult=''; my $current_answer; my $answers=join(':',@list); - $result.="Got response :$answers:
"; + $result.="Got response :$answers:\n"; my @responselist; my $type =eval $expr.';return $answer;'; if ($type ne '' && $#list > 0) { @@ -165,7 +167,7 @@ sub caparesponse_check_list { (@responselist)=($response); } my $unit=''; - $result.="Initial final response :$responselist['-1']:
"; + $result.="Initial final response :$responselist['-1']:\n"; if ($type eq '') { #for numerical problems split off the unit if ( $responselist['-1']=~ /(.*[^\s])\s+([^\s]+)/ ) { @@ -173,39 +175,42 @@ sub caparesponse_check_list { $unit=$2; } } - $result.="Final final response :$responselist['-1']:
"; - $result.=":$#list: answers
"; + $result.="Final final response :$responselist['-1']:\n"; + $result.=":$#list: answers\n"; $unit=~s/\s//; my $i=0; my $awards=''; for ($i=0; $i<@list;$i++) { - $result.="trying answer :$list[$i]:
"; + $result.="trying answer :$list[$i]:\n"; + my $thisanswer=$list[$i]; + $thisanswer=~ s/\\/\\\\/g; + $thisanswer =~ s/\'/\\\'/g; if ($unit eq '') { $aresult=&caparesponse_check($responselist[$i], - $expr.';my $answer=\''.$list[$i].'\';'); + $expr.';my $answer=\''.$thisanswer.'\';'); } else { $aresult=&caparesponse_check($responselist[$i]." $unit", - $expr.';my $answer=\''.$list[$i].'\';'); + $expr.';my $answer=\''.$thisanswer.'\';'); } my ($temp)=split /:/, $aresult; $awards.="$temp,"; $result.=$aresult; } chop $awards; - return "$awards:
$result"; + return "$awards:\n$result"; } sub tex { if ( $external::target eq "tex" ) { - return @_[0]; + return $_[0]; } else { - return @_[1]; + return $_[1]; } } sub var_in_tex { if ( $external::target eq "tex" ) { - return @_[0]; + return $_[0]; } else { return ""; } @@ -213,12 +218,12 @@ sub var_in_tex { sub web { if ( $external::target eq "tex" ) { - return @_[1]; + return $_[1]; } else { if ( $external::target eq "web" || $external::target eq "answer") { - return @_[2]; + return $_[2]; } else { - return @_[0]; + return $_[0]; } } } @@ -240,7 +245,9 @@ sub hinton { sub random { my ($start,$end,$step)=@_; if ( ! $hidden::RANDOMINIT ) { - &random_set_seed_from_phrase($external::randomseed); + if ($external::randomseed == 0) { $external::randomseed=1; } + &random_set_seed(1,int(abs($external::randomseed))); + &math_random_uniform(); $hidden::RANDOMINIT=1; } if (!defined($step)) { $step=1; } @@ -565,7 +572,7 @@ sub map { } } } - &random_set_seed(@seed); + &random_set_seed(@oldseed); return ''; }