Рандомизировать тест


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, а ответы от А до 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`

`

Проверьте это!


Вы пытались пойти на бонус?
CalculatorFeline

@CatsAreFluffy Нет, пока нет;)
Конор О'Брайен

1
@CatsAreFluffy Ну, это очень техническая вещь.
Конор О'Брайен

3
Что высоко? Что за вещь? Что такое технический? Что за ? Что за ...? Что осталось 493 персонажа?
CalculatorFeline

1
@ fond42518 Мое удовольствие! Тем не менее, в этой случайной сортировке я сохраняю функцию _=>.5-Math.random()в переменной r, на которую я ссылаюсь позже в пятой строке. На самом деле я выполняю два случайных вида: один по предметам, а другой по вопросам. Если вы хотите узнать больше о ES6, советую почитать здесь .
Конор О'Брайен

2

CJam, 54 53 55 52 байта

Сохранен 1 байт от использования более поздней версии (доступно на TIO). Получил 2 байта, потому что я забыл рандомизировать порядок вопросов. Сохранено 2 байта от еще одной ошибки, исправленной на TIO.

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

Попробуйте онлайн!


Только два байта получили? о_О
Конор О'Брайен

@ CᴏɴᴏʀO'Bʀɪᴇɴ lol Да, сначала я разбил на основе вопросов, а затем просто добавил mrоператор (randomize) для рандомизации порядка вопросов до того, как логика ответа вступит в силу.
GamrCorps
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.