Aleatorizar la prueba

21

Soy maestra y en unos días tengo que darles un examen a mis alumnos. Ahora, siempre me preocupa que mis alumnos más adorables se vean lastimados por los menos adorables cuando hacen trampa, así que quiero aleatorizar las pruebas para que nadie pueda engañar a nadie.

En este momento, tengo mis pruebas guardadas en este formato:

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

Es decir, las preguntas están separadas por una sola línea en blanco, y las respuestas están precedidas por dos espacios. Esta es la salida que necesito:

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

Es decir, cada respuesta a una pregunta en un orden aleatorio, y el orden de las preguntas también aleatorizado. Tenga en cuenta que si la opción de respuesta es "Ninguna de las anteriores", debe permanecer en la parte inferior. Cada pregunta siempre tiene exactamente cuatro respuestas, y "Ninguna de las anteriores" solo aparece como la última opción de respuesta, y nunca aparece como una subcadena de una opción de respuesta que no es "Ninguna de las anteriores". Desafortunadamente, no puedo reescribir todas mis pruebas, por lo que tendrá que tomarlas en ese formato. Además, mis alumnos deben poder leerlo, por lo que realmente no puedo tomar la salida de otra manera (excepto como se describe a continuación).

No necesito que sea perfectamente al azar. Mientras esté cerca.

Las lagunas estándar están prohibidas.


Prima

Ahora, mis alumnos están acostumbrados a ese formato simple, pero si puedes hacer que se vea así ...

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

Tomaré un 25% de descuento en tu puntaje final. Sin embargo, recibirás información de la misma manera.

Es decir, si numera las preguntas y etiqueta las respuestas. Tenga en cuenta que las preguntas deben comenzar en 1, y las respuestas son de A a D.


NB: Los ejemplos son diferentes de los de las respuestas porque los cambié después del hecho. Los ejemplos específicos no son el punto de todos modos; las respuestas tuvieron que funcionar con cualquier pregunta arbitraria.

Fondo de la demanda de Mónica
fuente
Los bonos en el código de golf generalmente se desaconsejan . Ninguna de las presentaciones actuales recibe el bono (excepto este , pero con el bono es una puntuación peor que sin él), por lo que es un buen indicador de que el desafío sería mejor sin el bono.
Mego
@Mego Se ajusta al tema de la pregunta y es fácil de entender. No hay daño en eso.
Fondo de la demanda de Mónica

Respuestas:

7

Pyth - 48 42 41 39 bytes

Will empacó la cuerda.

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

Pruébelo en línea aquí .

Maltysen
fuente
Aceptando esta respuesta porque esta pregunta fue [code-golf] y esta respuesta es la más corta. ¡Bien hecho!
Financia la demanda de Mónica
4

JavaScript ES6, 170 bytes

Es una función anónima, asígnele un nombre. Nota: esto utiliza el método de clasificación aleatoria, que no es completamente aleatorio , pero es suficiente, siempre que no seas un profesor de probabilidad.

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`

`

Con la bonificación, 180.75 bytes

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`

`

¡Pruébalo!

Conor O'Brien
fuente
¿Intentaste ir por el bono?
CalculatorFeline
@CatsAreFluffy No, neto todavía;)
Conor O'Brien
1
@CatsAreFluffy Bueno, es una cosa muy técnica ...
Conor O'Brien
3
¿Qué es un altamente? Que es una cosa ¿Qué es un técnico? Qué es un ? Qué es un ...? ¿Qué quedan 493 caracteres?
CalculatorFeline
1
@ fond42518 ¡Un placer! Sin embargo, en ese orden aleatorio, estoy guardando la función _=>.5-Math.random()en la variable r, a la que hago referencia más adelante en la quinta línea. Realmente estoy realizando dos tipos aleatorios: uno en los elementos y el otro en las preguntas. Si quieres aprender más sobre ES6, te sugiero leer aquí .
Conor O'Brien
2

CJam, 54 53 55 52 bytes

Se guardó 1 byte del uso de una versión posterior (disponible en TIO). Gané 2 bytes porque olvidé aleatorizar el orden de las preguntas. Guardado 2 bytes de otro error corregido en TIO.

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

Pruébalo en línea!

GamrCorps
fuente
¿Solo dos bytes ganados? o_O
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ lol sí, me dividí en base a preguntas al principio, luego agregué el mroperador (aleatorizar) para aleatorizar el orden de las preguntas antes de que la lógica de respuesta tenga lugar.
GamrCorps