Ejemplo n.º 1
0
 public function mark_automatically($student_answer, &$log)
 {
     $this->msg->set_root('/auto-marking');
     $log = array();
     if (!$this->auto_marking_method) {
         throw new Exception($this->msg->_('cannot-mark-type-none'));
     }
     if (!is_array($student_answer) || count($student_answer) != $this->n_answers) {
         throw new Exception($this->msg->_('invalid-format'));
     }
     $log[] = ['ft-running', []];
     $correct = 0;
     for ($i = 0; $i < $this->n_answers; $i++) {
         $log[] = ['ft-nth-field', [$i + 1]];
         $raw_answer = $student_answer[$i];
         $clean_answer = Util::remove_useless_whitespaces($raw_answer);
         $log[] = ['ft-pattern', [html($this->raw_answers[$i])]];
         $log[] = ['ft-given-answer', [html($raw_answer)]];
         $log[] = ['ft-given-answer-clean', [html($clean_answer)]];
         if (preg_match($this->answers[$i], $raw_answer) || preg_match($this->answers[$i], $clean_answer)) {
             $log[] = ['ft-result-correct', []];
             $correct++;
         } else {
             $log[] = ['ft-result-incorrect', []];
         }
     }
     if ($this->auto_marking_method == 'binary') {
         $mark = (int) ($correct == $this->n_answers);
         $log[] = ['mark', array('mark' => $mark)];
     } else {
         $mark = (double) $correct / $this->n_answers;
         $log[] = ['mark-with-fraction', array('numerator' => $correct, 'denominator' => $this->n_answers, 'mark' => $mark)];
     }
     return $mark;
 }
Ejemplo n.º 2
0
 public function mark_automatically($student_answer, &$log)
 {
     $this->msg->set_root('/auto-marking');
     $log = array();
     if (!$this->auto_marking_method) {
         throw new Exception($this->msg->_('cannot-mark-type-none'));
     }
     if (!is_string($student_answer)) {
         throw new Exception($this->msg->_('invalid-format'));
     }
     $clean_answer = Util::remove_useless_whitespaces($student_answer);
     $log[] = ['sa-running', []];
     $log[] = ['sa-pattern', [html($this->raw_answer)]];
     $log[] = ['sa-given-answer', [html($student_answer)]];
     $log[] = ['sa-given-answer-clean', [html($clean_answer)]];
     if (preg_match($this->answer, $student_answer) || preg_match($this->answer, $clean_answer)) {
         $log[] = ['sa-result-correct', []];
         $mark = 1;
     } else {
         $log[] = ['sa-result-incorrect', []];
         $mark = 0;
     }
     $log[] = ['mark', array('mark' => $mark)];
     return $mark;
 }