I am trying to make a problem that accepts periodic answers with units. I have attached the code of a sample question at the end.

For example, the solutions of sin(theta) = 0.5 in the first quadrant can be

theta = pi/6 rad,

theta = 13pi/6 rad etc...

I used the following to check the answer and everything works correctly.

$ansc = Real(pi/6)->with(period=>2*pi);

$ans = NumberWithUnits($ansc,"rad");

ANS($ans->cmp());

On the other hand, I also want to accept

theta = 30 deg

theta = 390 deg, etc...

But the answer checker does not accept "390 deg". It instead accepts "(30 + 2*pi) deg".

For another example, the solutions of sin(at) = 0.5 when a = pi/3 rad/min can be

t = 0.5 min,

t = 6.5 min, etc... (just 1st quadrant for at for now)

The following checker works as long as the unit is in min.

$ansc = Real(0.5)->with(period=>Real(6));

$ans = NumberWithUnits($ansc,"min");

ANS($ans->cmp());

But if students enter their answers in seconds, the answer checker accepts t = 30 s but also "t = 36 s". The period is changed to 6 seconds instead of 6 minutes.

Is there a way for the answer check to appropriately accept a periodic answer with unit? If I need to write a custom answer checker, how can I convert the unit of student's answer to the unit provided in the answer key? Thanks very much for any help or insight.

DOCUMENT();

loadMacros(

"PGbasicmacros.pl",

"PGanswermacros.pl",

"MathObjects.pl",

"parserNumberWithUnits.pl",

);

TEXT(beginproblem());

Context()->texStrings;

BEGIN_TEXT

Find one value of \(\theta\) so that \(\sin(\theta) = \dfrac{1}{2}\) and \(\cos(\theta) = \dfrac{\sqrt{3}}{2}\). Include the \{helpLink("unit")\} in your answer.

$BR

\(\theta = \) \{ans_rule(20)\}

$BR $BR

Find one value of \(t\) so that \(\sin(\omega t) = 0.5\) and \(\cos(\omega t) = \dfrac{\sqrt{3}}{2}\) if \(\omega = \dfrac{\pi}{3}\) rad/min. Include the \{helpLink("unit")\} in your answer.

$BR

\(t = \) \{ans_rule(20)\}

END_TEXT

Context()->normalStrings;

$ansc = Real(pi/6)->with(period=>2*pi);

$ans = NumberWithUnits($ansc,"rad");

ANS($ans->cmp());

$ansc = Real(0.5)->with(period=>Real(6));

$ans = NumberWithUnits($ansc,"min");

ANS($ans->cmp());

ENDDOCUMENT();