评估多项选择题的编程技巧

时间:2016-07-06 11:41:43

标签: c++ design-patterns pattern-matching interpreter

我需要设计一个模块(用C ++编写)来评估包含多个选项正确的问题的学生表(带有部分标记);

我的输入是: -

  • 正确答案:选项向量(例如'A','C','D');
  • 学生回答:选项向量(例如'A','B','C');

上述问题类型的评估规则如下: -

  • 完整标记:(+ 4)如果只标记了与正确选项对应的选项
  • 部分标记:(+ 1)用于标记每个正确的选项,但没有标记错误的选项
  • 无标记:(0)如果没有标记
  • 的选项
  • 否定标记:( - 2)在所有其他情况下

例如,如果(A),(C)和(D)是问题的正确选项,则标记所有这三个将导致+4标记;仅标记(A)和(D)将产生+2标记;并且标记(A)和(B)将导致-2标记,因为错误的选项也被标记。

注意:上述规则可能会在以后更改并变得复杂。

我想到了以下方法: -

  1. 对规则进行硬编码。这不灵活,因为规则可能会改变,例如新的子句可能是:填写错误的选项会导致部分负面标记等;
  2. 使用正则表达式在规则方面获得一些灵活性。可以为上述每个子规则构建正则表达式,并且可以执行匹配以找到学生响应中的哪个子规则匹配并相应地分配标记。因此,通过仅更改正则表达式,我们可以更改规则。
  3. 使用策略模式。
  4. 如果您认为上述方法存在缺陷或有更好的解决方案,请提供您的建议。

1 个答案:

答案 0 :(得分:1)

使用std::set_symmetric_difference。确保输入$('.inline').each(function(){ $(this).colorbox({inline:true, width:$(this).data('width'), height:$(this).data('height')}); }); 都已排序。它将为您提供他们没有共同点的元素。因此,如果结果为空集,则学生答案与正确答案完全相同。否则,检查结果元素是否在答案中。

我会做类似以下的事情(TL; DR:硬编码):

std::vector

免责声明:未经测试。只需看一下它就可以作为一个例子来帮助您入门。