テストをランダム化する


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
  ++

つまり、質問は1つの空白行で区切られ、回答の前にはすべて2つのスペースがあります。これは私が必要とする出力です:

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

つまり、質問に対する各回答はランダムな順序で行われ、質問の順序もランダム化されます。回答の選択肢が「上記のいずれでもない」の場合、一番下に留まる必要があることに注意してください。すべての質問には常に4つの回答があり、「上記のどれでもない」は最後の回答選択肢としてのみ表示され、「上記のいずれでもない」回答選択肢のサブストリングとして表示されることはありません。残念ながら、すべてのテストを書き換えることはできません。そのため、その形式でテストを行う必要があります。また、生徒はそれを読むことができる必要があるため、他の方法で出力を取得することはできません(以下で説明する場合を除く)。

完全にランダムである必要はありません。近い限り。

標準的な抜け穴は禁止されています。


ボーナス

今、私の学生はその単純な形式に慣れていますが、もしあなたがそれをこのように見せることができるなら...

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であることに注意してください。


NB:例は答えの例とは異なります。なぜなら私は事後にそれらを変えたからです。とにかく、具体的な例はポイントではありません。回答は、任意の質問で機能する必要がありました。


コードゴルフでのボーナスは一般的に推奨されません。現在の提出物はどれもボーナスを受け取りません(これを除きますが、ボーナスがある場合はない場合よりも悪いスコアになります)。
メゴ

@Mego質問のテーマに適合し、理解しやすい。害はありません。
ファンドモニカの訴訟

回答:



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`

`

試してみてください!


ボーナスに出かけましたか?
電卓

@CatsAreFluffyいいえ、まだネット;)
コナーオブライエン

1
@CatsAreFluffyまあ、それは非常に技術的な...ものです。
コナーオブライエン

3
非常に何ですか?なんだ?技術とは何ですか?なに?...とは何ですか?残り493文字は何ですか?
電卓

1
@ fond42518私の喜び!ただし、そのランダムな並べ替えでは、関数_=>.5-Math.random()を変数に保存していますがr、これは後で5行目で参照します。私は実際に2つのランダムな並べ替えを実行しています。1つはアイテム、もう1つは質問です。ES6の詳細を知りたい場合は、ここを読むことをお勧めします
コナーオブライエン

2

CJam、54 53 55 52バイト

それ以降のリリースの使用から1バイトを節約(TIOで利用可能)。質問の順序をランダム化するのを忘れたため、2バイト増えました。TIOで修正されたさらに別のバグから2バイトを保存しました。

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

オンラインでお試しください!


獲得したのは2バイトだけですか?o_O
コナーオブライエン

@CᴏɴᴏʀO'Bʀɪᴇɴ笑ええ、私はそのように、私はちょうど追加、冒頭の質問に基づいて分割mr回答ロジックが行われる前に質問の順番をランダム化するオペレータ(ランダマイズを)。
GamrCorps
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.