Randomizza il test


21

Sono un insegnante e tra qualche giorno devo fare un test ai miei studenti. Ora, sono sempre preoccupato che i miei studenti più belli vengano feriti da quelli meno carini quando imbrogliano, quindi voglio randomizzare i test in modo che nessuno possa imbrogliare nessuno.

In questo momento, ho i miei test salvati in questo 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
  ++

Cioè, le domande sono separate da un'unica riga vuota e le risposte sono tutte precedute da due spazi. Questo è l'output di cui ho bisogno:

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

Cioè, ogni risposta a una domanda in un ordine casuale e anche l'ordine delle domande in modo casuale. Tieni presente che se la scelta della risposta è "Nessuna delle precedenti", dovrebbe rimanere in fondo. Ogni domanda ha sempre esattamente quattro risposte e "Nessuna delle precedenti" appare solo come ultima opzione di risposta - e non appare mai come sottostringa di una scelta di risposta che non è "Nessuna delle precedenti". Sfortunatamente, non posso riscrivere tutti i miei test, quindi dovrai prenderli in quel formato. Inoltre, i miei studenti devono essere in grado di leggerlo, quindi non posso davvero prendere l'output in nessun altro modo (tranne come descritto di seguito).

Non ho bisogno che sia perfettamente casuale. Finché è vicino.

Le scappatoie standard sono vietate.


indennità

Ora, i miei studenti sono abituati a quel formato semplice, ma se riesci a farlo sembrare così ...

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

Prenderò il 25% di sconto sul tuo punteggio finale. Riceverai input allo stesso modo, però.

Cioè, se numerate le domande ed etichettate le risposte. Tieni presente che le domande dovrebbero iniziare da 1 e le risposte vanno dalla A alla D.


NB: Gli esempi sono diversi da quelli nelle risposte perché li ho cambiati dopo il fatto. Gli esempi specifici non sono comunque il punto; le risposte dovevano funzionare con qualsiasi domanda arbitraria.


I bonus nel code golf sono generalmente scoraggiati . Nessuna delle presentazioni attuali riceve il bonus (tranne questo , ma con il bonus è un punteggio peggiore che senza), quindi è un buon indicatore che la sfida sarebbe migliore senza il bonus.
Mego

@Mego Si adatta al tema della domanda ed è facile da capire. Non c'è nulla di male in esso.
Finanzi la causa di Monica il

Risposte:



4

JavaScript ES6, 170 byte

È una funzione anonima, chiamala. Nota: utilizza il metodo di ordinamento casuale, che non è del tutto casuale , ma è sufficiente, a condizione che tu non sia un insegnante di 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`

`

Con il bonus, 180,75 byte

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`

`

Provalo!


Hai provato ad andare per il bonus?
Calcolatrice

@CatsAreFluffy No, netto ancora;)
Conor O'Brien

1
@CatsAreFluffy Bene, è una cosa molto tecnica ...
Conor O'Brien,

3
Che cosa è altamente? Che cosa è una cosa? Che cos'è un tecnico? Cos'è un ? Cos'è un ...? Cosa rimane un 493 caratteri?
Calcolatrice

1
@ fond42518 Piacere mio! Tuttavia, in quell'ordinamento casuale, sto salvando la funzione _=>.5-Math.random()nella variabile r, a cui faccio riferimento in seguito sulla quinta riga. In realtà sto eseguendo due tipi casuali: uno sugli oggetti e l'altro sulle domande. Se vuoi saperne di più su ES6, ti suggerisco di leggere qui .
Conor O'Brien,

2

CJam, 54 53 55 52 byte

Salvato 1 byte dall'uso di una versione successiva (disponibile su TIO). Guadagnato 2 byte perché ho dimenticato di randomizzare l'ordine delle domande. Salvato 2 byte da un altro bug corretto su TIO.

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

Provalo online!


Solo due byte guadagnati? o_O
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ lol sì, mi sono diviso in base alle domande all'inizio, quindi ho appena aggiunto l' mroperatore (randomizzato) per randomizzare l'ordine delle domande prima che abbia luogo la logica di risposta.
GamrCorps l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.