Annotation of loncom/homework/templates/customhints.problem, revision 1.3

1.1       www         1: <problem>
                      2: <script type="loncapa/perl"># Construct an Egyptian Fraction that can be represented by three terms with denominators between 3 and 12
                      3: @denominators=(&random_permutation(&random(1,1000,1),(3..12)))[0..2];
                      4: $egyptian='1/'.(join('+1/',sort{$a<=>$b}(@denominators)));
                      5: $possible="A possible solution is $egyptian";
                      6: 
                      7: # Let the CAS figure out the value
                      8: $solution=&cas('maxima',$egyptian);
                      9: 
                     10: # Subroutine that checks if the provided term is indeed an Egyptian Fraction
                     11: sub analyze {
                     12:     my ($expression)=@_;
                     13:     $expression=~s/\s//gs;
                     14:     $expression=~s/\+?1\//\,/gs;
                     15:      if ($expression=~/^(\,[0-9]+)+$/) {
                     16: # Format is indeed 1/n+1/m+...
                     17:         $last=-1;
                     18:         foreach $number (sort { $a<=>$b } split(/\,/,$expression)) {
                     19: # Is a number used twice?
                     20:              if ($last==$number) { return(0,1); }
                     21:              $last=$number;
                     22:           }
                     23:           return(0,0);
                     24:      }
                     25:      return(1,0);
                     26: }
                     27: </script>
                     28: 
                     29: <startouttext />
                     30: 
                     31: Write $solution as an Egyptian Fraction<br />
                     32: <endouttext />
                     33: 
                     34: <customresponse answerdisplay="$possible" id="11">
                     35:     <answer type="loncapa/perl"># Analyze the format
                     36: ($formaterror,$doubleerror)=&analyze($submission);
1.3     ! www        37: if ($formaterror || $doubleerror) { return 'WRONG_FORMAT'; }
1.1       www        38: # It is an Egyptian Fraction, is the value correct?
                     39: if (&cas('maxima',$submission.'-('.$egyptian.')') eq '0') {
                     40:     return 'EXACT_ANS';
                     41: }
                     42: return 'INCORRECT';</answer>
                     43:     <textline readonly="no" size="40" />
                     44: 
                     45:  <customhint name="format" id="12">
                     46:       <answer type="loncapa/perl">if ((&analyze($submission))[0]) { return 'EXACT_ANS'; }
                     47: return 'INCORRECT';</answer>
                     48: </customhint>
                     49: <hintpart on="format">
                     50: <startouttext />
                     51: <p>
                     52: Egyptian Fractions have a format of 1/number+1/number+..., for example 1/3+1/17+1/52. 
                     53: </p>
                     54: <endouttext />
                     55: </hintpart>
                     56:  <customhint name="double" id="13">
                     57:       <answer type="loncapa/perl">if ((&analyze($submission))[1]) { return 'EXACT_ANS'; }
                     58: return 'INCORRECT';</answer>
                     59: </customhint>
                     60: <hintpart on="double">
                     61: <startouttext />
                     62: <p>
1.2       www        63: Egyptian Fractions cannot have the same denominator more than once. For example, 1/3+1/17+1/4+1/17 is not an Egyptian Fraction, as it has 17 twice as denominator.
1.1       www        64: </p>
                     65: <endouttext />
                     66: </hintpart>
                     67: </customresponse>
                     68: </problem>
                     69: 

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