version 1.169, 2014/06/25 16:50:51
|
version 1.176, 2019/04/03 21:37:11
|
Line 309 sub caparesponse_check_list {
|
Line 309 sub caparesponse_check_list {
|
#for numerical problems split off the unit |
#for numerical problems split off the unit |
my $part1; |
my $part1; |
my $part2; |
my $part2; |
|
my $match_algebra = qr{^(.*[^\s])\s+([^\s]+)$}; |
|
# FIXME: with the above regexp, algebra with spaces will not be evaluated correctly |
|
my $match_numerical_units = qr{^([\d\.\,\s\$]*(?:(?:[xX\*]10[\^\*]*|[eE]*)[\+\-]*\d*)*(?:^|\S)\d+)([\$\s\w\^\*\/\(\)\+\-]*[^\d\.\s\,][\$\s\w\^\*\/\(\)\+\-]*)$}; |
if ($allowalgebra) { |
if ($allowalgebra) { |
($part1,$part2)=($responses->[0][-1]=~ /^(.*[^\s])\s+([^\s]+)$/); |
($part1,$part2) = ($responses->[0][-1] =~ /$match_algebra/); |
} else { |
} else { |
($part1,$part2)=($responses->[0][-1]=~ /^([\d\.\,\s\$]*(?:(?:[xX\*]10[\^\*]*|[eE]*)[\+\-]*\d*)*(?:^|\S)\d+)([\$\s\w\^\*\/\(\)\+\-]*[^\d\.\s\,][\$\s\w\^\*\/\(\)\+\-]*)$/); |
($part1,$part2) = ($responses->[0][-1] =~ /$match_numerical_units/); |
} |
} |
if (defined($part1) && defined($part2)) { |
if (defined($part1) && defined($part2)) { |
$responses->[0][-1]=$part1; |
$responses->[0][-1]=$part1; |
Line 327 sub caparesponse_check_list {
|
Line 330 sub caparesponse_check_list {
|
} |
} |
} |
} |
} |
} |
|
if (scalar(@$responses) > 0 && defined $answerunit) { |
|
# there are several response values, units should be the same for all |
|
$part2 =~ s/^\s+|\s+$//g; |
|
for (my $i=1; $i<scalar(@$responses); $i++) { |
|
my $element = $responses->[$i][-1]; |
|
my ($part1i, $part2i); |
|
if ($allowalgebra) { |
|
($part1i, $part2i) = ($element =~ /$match_algebra/); |
|
} else { |
|
($part1i, $part2i) = ($element =~ /$match_numerical_units/); |
|
} |
|
$part2i =~ s/^\s+|\s+$//g; |
|
if (!defined $part2i) { |
|
return 'NO_UNIT'; |
|
} elsif ($part2i ne $part2) { |
|
return ('UNIT_FAIL', "$part2 $part2i"); |
|
} else { |
|
$responses->[$i][-1] = $part1i; |
|
} |
|
} |
|
} |
} |
} |
} |
} |
$unit=~s/\s//; |
$unit=~s/\s//; |
Line 632 sub hinton {
|
Line 656 sub hinton {
|
sub random { |
sub random { |
my ($start,$end,$step)=@_; |
my ($start,$end,$step)=@_; |
if ( ! $hidden::RANDOMINIT ) { |
if ( ! $hidden::RANDOMINIT ) { |
if ($external::randomseed == 0) { $external::randomseed=1; } |
if ($external::randomseed == 0) { $external::randomseed=1; } |
if ($external::randomseed =~/,/) { |
if ($external::randomseed =~/,/) { |
my ($num1,$num2)=split(/,/,$external::randomseed); |
my ($num1,$num2) = map { abs($_); } split(/,/,$external::randomseed); |
&random_set_seed(1,abs($num1)); |
if ((!$num1) || ($num1 > 2147483398)) { |
} elsif ($external::randomseed =~/:/) { |
&random_set_seed_from_phrase($external::randomseed); |
my ($num1,$num2)=split(/:/,$external::randomseed); |
} else { |
&random_set_seed(abs($num1),abs($num2)); |
&random_set_seed(1,$num1); |
} else { |
} |
&random_set_seed(1,int(abs($external::randomseed))); |
} elsif ($external::randomseed =~/:/) { |
} |
my ($num1,$num2) = map { abs($_); } split(/:/,$external::randomseed); |
|
if ((!$num1) || (!$num2) || ($num1 > 2147483562) || ($num2 > 2147483398)) { |
|
&random_set_seed_from_phrase($external::randomseed); |
|
} else { |
|
&random_set_seed($num1,$num2); |
|
} |
|
} else { |
|
my $num1 = int(abs($external::randomseed)); |
|
if ((!$num1) || ($num1 > 2147483398)) { |
|
&random_set_seed_from_phrase($external::randomseed); |
|
} else { |
|
&random_set_seed(1,$num1); |
|
} |
|
} |
&math_random_uniform(); |
&math_random_uniform(); |
$hidden::RANDOMINIT=1; |
$hidden::RANDOMINIT=1; |
} |
} |
Line 902 sub chemparse {
|
Line 939 sub chemparse {
|
my $formula = ''; |
my $formula = ''; |
foreach my $token (@tokens) { |
foreach my $token (@tokens) { |
if ($token eq '->' ) { |
if ($token eq '->' ) { |
$formula .= '<m>\ensuremath{\rightarrow}</m> '; |
if ($external::target eq 'web') { |
|
$formula .= '→ '; |
|
} else { |
|
$formula .= '<m>\ensuremath{\rightarrow}</m> '; |
|
} |
next; |
next; |
} |
} |
if ($token eq '<-' ) { |
if ($token eq '<-' ) { |
$formula .= '<m>\ensuremath{\leftarrow}</m> '; |
if ($external::target eq 'web') { |
|
$formula .= '← '; |
|
} else { |
|
$formula .= '<m>\ensuremath{\leftarrow}</m> '; |
|
} |
next; |
next; |
} |
} |
if ($token eq '<=>') { |
if ($token eq '<=>') { |
Line 944 sub chemparse {
|
Line 989 sub chemparse {
|
return &xmlparse($formula); |
return &xmlparse($formula); |
} |
} |
|
|
|
sub conv_eng_format { |
|
my ($ans,$baseunit)=@_; |
|
my ($value,$answer,$unit); |
|
$baseunit =~ s{[^\w/\-\.]}{}g; |
|
eval { |
|
$value = &number_format_pref($ans); |
|
}; |
|
my ($answer,$prefix) = ($value=~ /^(.+)(\w)$/); |
|
my $unit = $prefix.$baseunit; |
|
return($answer,$unit); |
|
} |
|
|
sub prettyprint { |
sub prettyprint { |
my ($value,$fmt,$target)=@_; |
my ($value,$fmt,$target)=@_; |
my $result; |
my $result; |
Line 1228 sub sec {
|
Line 1285 sub sec {
|
} |
} |
|
|
sub submission { |
sub submission { |
my ($partid,$responseid,$subnumber,$encode,$cleanupnum)=@_; |
my ($partid,$responseid,$subnumber,$encode,$cleanupnum,$mapalias)=@_; |
my $sub=''; |
my $sub=''; |
if ($subnumber) { $sub=$subnumber.':'; } |
if ($subnumber) { $sub=$subnumber.':'; } |
my $output = |
my $output = |
&EXT('user.resource.'.$sub.'resource.'.$partid.'.'.$responseid.'.submission'); |
&EXT('user.resource.'.$sub.'resource.'.$partid.'.'.$responseid.'.submission',$mapalias); |
if (ref($output) eq 'ARRAY') { |
if (ref($output) eq 'ARRAY') { |
my @items = @{$output}; |
my @items = @{$output}; |
if ($encode) { |
if ($encode) { |
Line 1458 sub proper_path {
|
Line 1515 sub proper_path {
|
} |
} |
} |
} |
|
|
|
sub input_id { |
|
my ($part_id, $response_id, $textline_id) = @_; |
|
return 'HWVAL_'.$part_id.'_'.$response_id.'_'.$textline_id; |
|
} |
|
|