WeBWorK Problems

Answer checker issue

Answer checker issue

by Tim Alderson -
Number of replies: 2

I cannot spot why the second question is always marked as correct. Hoping for some help...


DOCUMENT();        

loadMacros(
  "PGstandard.pl",
  "MathObjects.pl",
  "PGchoicemacros.pl",
  "algebraMacros.pl",
  "PGcourse.pl","PGauxiliaryFunctions.pl"
);

TEXT(beginproblem());
$showPartialCorrectAnswers = 0;


#
# In this problem we determine the intersection of two subgroups of
# Z_n and find an element NOT in the intersection
#

@set = (2, 3,  5, 7, 11, 13, 17, 19);

#
# pick three distinct primes from the list
#

$r1 = random(0,7,1);
$r2 = random(0,7,1);
while($r1 == $r2){
    $r2 = random(0,7,1);
}
$r3 = random(0,7,1);
while($r3 == $r1 || $r3 == $r2){
    $r3 = random(0,7,1);
}

$p1 = $set[$r1];
$p2 = $set[$r2];
$p3 = $set[$r3];
$n  = $p1 * $p2 * $p3;

$p23 = $p2 * $p3;
$rx  = random(1,25,1);
while( gcd($rx, $p23) > 1 ) {
 $rx  = random(1,25,1);
}
$x = $rx * $p1;


$p13 = $p1 * $p3;
$ry  = random(1,25,1);
while( gcd($ry, $p13) > 1 ) {
 $ry  = random(1,25,1);
}
$y = $ry * $p2;

$p12 = $p1 * $p2;
$answer1 = Compute( $p3 );

# example of an element of Z/$n not in <$x> \intersect <$y>
$answer2 = Compute( 1 );

BEGIN_TEXT

(a) Find the order of the subgroup \(\langle $x \rangle \cap \langle $y \rangle\) of \( \{ cyclic( $n ) \} \) $BR $BR

\{ ans_rule(10) \} $BR $BR

(b) Write down one element of \( \{ cyclic( $n ) \} \) not in \(\langle $x \rangle \cap \langle $y \rangle\). $BR $BR

\{ ans_rule(10) \}

END_TEXT

ANS( $answer1->cmp );

#
# custom answer check for second part:
#     input is correct <==> gcd( student's input, $p12) = 1

ANS( $answer2->cmp(checker=> sub
    {
        my( $student, $correct, $ansHash ) = @_;
        return (gcd( $student, $p12 ) == 1 ) ? 1 : 0;
    }
) );




ENDDOCUMENT();  

In reply to Tim Alderson

Re: Answer checker issue

by Alex Jordan -
The arguments passed to the checker are actually in this order:
($correct,$student,$ansHash)
So the way you have it set up, with $correct and $student reversed, $student is actually taking the value of the correct answer, which is 1. And then of course the gcd of 1 and $p12 is always 1.