随机化测试


21

我是老师,几天后我必须给学生考试。现在,我一直担心最可爱的学生在作弊时会受到最不可爱的学生的伤害,所以我想对考试进行随机化处理,以便没人能欺骗任何人。

现在,我的测试以这种格式保存:

When was Java invented?
  Why does this matter?
  1941
  War was beginning
  None of the above

What is the increment operator in Java?
  Stack Overflow>how 2 incrememnt
  Google>how 2 incrememnt
  increment
  ++

也就是说,问题用单个空白行分隔,并且答案都以两个空格开头。这是我需要的输出:

What is the increment operator in Java?
  ++
  increment
  Google>how 2 incrememnt
  Stack Overflow>how 2 incrememnt

When was Java invented?
  War was beginning
  1941
  Why does this matter?
  None of the above

也就是说,每个问题的答案都以随机顺序排列,并且问题顺序也随机化。请记住,如果答案选择为“以上皆非”,则应将其留在底部。每个问题总是有恰好四个答案,并且“以上都不是”仅会作为最后一个答案选项出现-绝不会出现在不是“以上都不是”的答案选项的子字符串中。不幸的是,我无法重写所有测试,因此您必须采用这种格式。另外,我的学生必须能够阅读它,所以我不能真正采用其他任何方式输出(如下所述)。

我不需要它是完全随机的。只要关门就行。

禁止出现标准漏洞


奖金

现在,我的学生已经习惯了那种简单的格式,但是如果您可以使它看起来像这样……

1. What is the increment operator in Java?
  A. ++
  B. increment
  C. Google>how 2 incrememnt
  D. Stack Overflow>how 2 incrememnt

2. When was Java invented?
  A. War was beginning
  B. 1941
  C. Why does this matter?
  D. None of the above

我将从你的最终成绩中扣除25%。但是,您将以相同的方式获得输入。

也就是说,如果您编号问题并标记答案。请记住,问题应从1开始,答案从A到D。


注意:这些示例与答案中的示例不同,因为我在事后更改了它们。无论如何,具体的例子不是重点。答案必须适用于任何任意问题。


通常不鼓励打码高尔夫。当前提交的文件都没有获得奖金(除了这一项,但有奖金比没有奖金要差),因此这是一个很好的指标,表明如果没有奖金,挑战会更好。
Mego 2016年

@Mego符合问题的主题,易于理解。没有害处。
Fund Monica的诉讼

Answers:



4

JavaScript ES6,170个字节

是一个匿名函数,命名它。注意:这使用了随机排序方法,这不是完全随机的,但是只要您不是概率教师,就足够了。

t=>t.split`

`.map(x=>(x=x.split`
`,R=[],(k=x.pop())=="  None of the above"?(R=[k]):x.push(k),[x.shift(),...x.sort(r=_=>.5-Math.random()),...R].join`
`)).sort(r).join`

`

有了奖金,180.75字节

t=>t.split`

`.map(x=>(x=x.split`
`,R=[],(k=x.pop())=="  None of the above"?(R=[k]):x.push(k),[x.shift(),...x.sort(r=_=>.5-Math.random()),...R].map((k,i)=>(i?`  ${" ABCD"[i]}. `:"")+k.trim()).join`
`),a=0).sort(r).map(e=>++a+". "+e).join`

`

测试一下!


您是否尝试过获得奖金?
CalculatorFeline

@CatsAreFluffy不,还没有;)
Conor O'Brien

1
@CatsAreFluffy好吧,这是技术含量很高的事情。
科纳·奥布莱恩

3
什么是高度?什么事 什么是技术?什么是 ?什么是 ...?还剩493个字符?
CalculatorFeline

1
@ fond42518我的荣幸!但是,在这种随机排序中,我将函数保存_=>.5-Math.random()到变量r,稍后在第五行中进行引用。我实际上是在进行两种随机排序:一种针对项目,另一种针对问题。如果您想了解更多ES6,建议在这里阅读。
科纳·奥布莱恩

2

CJam,54 53 55 52字节

使用更高版本(在TIO上可用)节省了1个字节。获得2个字节,因为我忘记了随机排序问题。从TIO上修复的另一个错误中保存了2个字节。

qNN+/mr{N/(\mr_"  None of the above"#3e\N*N\++}%NN+*

在线尝试!


仅获得了两个字节?o_O
Conor O'Brien

@CᴏɴᴏʀO'Bʀɪᴇɴ哈哈,是的,我在一开始就根据问题进行了拆分,因此我只添加了mr运算符(随机化)以在回答逻辑发生之前将问题的顺序随机化。
GamrCorps'3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.