Рандомізуйте тест


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 Ні, ще немає;)
Conor O'Brien

1
@CatsAreFluffy Ну, це дуже технічна ... річ.
Conor O'Brien

3
Що високо? Яка річ? Що технічне? Що таке? Що таке ...? Що залишилось 493 символів?
CalculatorFeline

1
@ fond42518 Моє задоволення! Однак у цьому випадковому сорті я зберігаю функцію _=>.5-Math.random()до змінної r, про яку я посилаюсь пізніше у п’ятому рядку. Я фактично виконую два випадкові сортування: один за предметами, а другий за запитаннями. Якщо ви хочете дізнатися більше ES6, пропоную прочитати тут .
Conor O'Brien

2

CJam, 54 53 55 52 байт

Збережено 1 байт від використання пізнішого випуску (доступний у TIO). Набрав 2 байти, бо забув рандомізувати порядок питань. Збережено 2 байти з ще однієї помилки, виправленої на TIO.

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

Спробуйте в Інтернеті!


Набрали лише два байти? o_O
Conor O'Brien

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