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; }
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; }