Randomisez le test

21

Je suis professeur et dans quelques jours je dois faire passer un test à mes élèves. Maintenant, je suis toujours inquiet que mes plus beaux élèves soient blessés par les moins beaux quand ils trichent, donc je veux randomiser les tests afin que personne ne puisse tromper personne.

En ce moment, j'ai mes tests enregistrés dans ce format:

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

Autrement dit, les questions sont séparées par une seule ligne vierge et les réponses sont toutes précédées de deux espaces. Voici la sortie dont j'ai besoin:

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

Autrement dit, chaque réponse à une question dans un ordre aléatoire, et l'ordre des questions est également aléatoire. Gardez à l'esprit que si la réponse est "Aucune des réponses ci-dessus", elle doit rester en bas. Chaque question a toujours exactement quatre réponses, et «Aucune des réponses ci-dessus» n'apparaît que comme le dernier choix de réponse - et n'apparaît jamais comme une sous-chaîne d'un choix de réponse qui n'est pas «Aucune des réponses ci-dessus». Malheureusement, je ne peux pas réécrire tous mes tests, vous devrez donc les prendre dans ce format. De plus, mes élèves doivent pouvoir le lire, donc je ne peux pas vraiment prendre la sortie autrement (sauf comme décrit ci-dessous).

Je n'ai pas besoin que ce soit parfaitement aléatoire. Tant qu'il est proche.

Les failles standard sont interdites.


Prime

Maintenant, mes élèves sont habitués à ce format simple, mais si vous pouvez le faire ressembler à ceci ...

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

Je prendrai 25% de votre score final. Vous obtiendrez la même manière, cependant.

Autrement dit, si vous numérotez les questions et étiquetez les réponses. N'oubliez pas que les questions doivent commencer à 1 et que les réponses vont de A à D.


NB: Les exemples sont différents de ceux des réponses car je les ai modifiés après coup. Les exemples spécifiques ne sont de toute façon pas pertinents; les réponses devaient fonctionner avec toute question arbitraire.

Action en justice de Fund Monica
la source
Les bonus dans le golf de code sont généralement découragés . Aucune des soumissions actuelles ne prend le bonus (sauf celui-ci , mais avec le bonus est un score pire que sans), c'est donc un assez bon indicateur que le défi serait mieux sans le bonus.
Mego
@Mego Il correspond au thème de la question et est facile à comprendre. Il n'y a aucun mal à cela.
Fund Monica's Lawsuit

Réponses:

7

Pyth - 48 42 41 39 octets

Sera emballé la chaîne.

js.Sm++hd/D"None of the above".Stdkc.zk

Essayez-le en ligne ici .

Maltysen
la source
Accepter cette réponse car cette question était [code-golf] et cette réponse est la plus courte. Bien joué!
Fund Monica's Lawsuit
4

JavaScript ES6, 170 octets

Est une fonction anonyme, nommez-la. Remarque: cela utilise la méthode de tri aléatoire, qui n'est pas entièrement aléatoire , mais suffisante, à condition que vous ne soyez pas un enseignant de probabilité.

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`

`

Avec le bonus, 180,75 octets

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`

`

Testez-le!

Conor O'Brien
la source
Avez-vous essayé d'aller chercher le bonus?
CalculatorFeline
@CatsAreFluffy Non, net encore;)
Conor O'Brien
1
@CatsAreFluffy Eh bien, c'est une chose très technique ....
Conor O'Brien
3
Qu'est-ce qu'un très? Qu'est-ce qu'une chose? Qu'est-ce qu'une technique? Qu'est ce qu'un ? Qu'est ce qu'un ...? Que reste-t-il à 493 caractères?
CalculatorFeline
1
@ fond42518 Mon plaisir! Cependant, dans ce tri aléatoire, j'enregistre la fonction _=>.5-Math.random()dans la variable r, à laquelle je fais référence plus loin sur la cinquième ligne. J'effectue en fait deux sortes aléatoires: l'une sur les éléments et l'autre sur les questions. Si vous voulez en savoir plus sur ES6, je vous suggère de lire ici .
Conor O'Brien
2

CJam, 54 53 55 52 octets

Enregistrement d'un octet lors de l'utilisation d'une version ultérieure (disponible sur TIO). J'ai gagné 2 octets car j'ai oublié de randomiser l'ordre des questions. Enregistré 2 octets d'un autre bug corrigé sur TIO.

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

Essayez-le en ligne!

GamrCorps
la source
Seulement deux octets gagnés? o_O
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ lol ouais, je me suis divisé en fonction des questions au début, alors j'ai juste ajouté l' mropérateur (randomiser) pour randomiser l'ordre des questions avant que la logique de réponse n'ait lieu.
GamrCorps