Randomize o teste

21

Sou professora e em alguns dias tenho que fazer uma prova para meus alunos. Agora, eu sempre estou preocupado com meus alunos mais adoráveis ​​serem feridos pelos menos adoráveis ​​quando trapaceiam, então eu quero aleatoriamente os testes para que ninguém possa enganar ninguém.

No momento, tenho meus testes salvos neste 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
  ++

Ou seja, as perguntas são separadas por uma única linha em branco e as respostas são precedidas por dois espaços. Esta é a saída que eu preciso:

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

Ou seja, cada resposta de uma pergunta em uma ordem aleatória e a ordem das perguntas também aleatoriamente. Lembre-se de que, se a opção de resposta for "Nenhuma das opções acima", ela deverá permanecer na parte inferior. Todas as perguntas sempre têm exatamente quatro respostas e "Nenhuma das opções acima" aparece apenas como a última opção de resposta - e nunca aparece como uma subcadeia de uma opção de resposta que não é "Nenhuma das opções acima". Infelizmente, não consigo reescrever todos os meus testes; portanto, você precisará realizá-los nesse formato. Além disso, meus alunos precisam ser capazes de lê-lo, para que eu não possa entender a saída de nenhuma outra maneira (exceto como descrito abaixo).

Não preciso que seja perfeitamente aleatório. Contanto que esteja perto.

As brechas padrão são proibidas.


Bônus

Agora, meus alunos estão acostumados a esse formato simples, mas se você puder fazer isso parecer assim ...

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

Vou tirar 25% da sua pontuação final. Você receberá informações da mesma maneira.

Ou seja, se você numerar as perguntas e rotular as respostas. Lembre-se de que as perguntas devem começar em 1 e as respostas são de A a D.


NB: Os exemplos são diferentes dos das respostas, porque eu os mudei após o fato. Os exemplos específicos não são o ponto de qualquer maneira; as respostas tinham que funcionar com qualquer pergunta arbitrária.

Fund Processo de Monica
fonte
Bônus no código de golfe geralmente são desencorajados . Nenhuma das inscrições atuais recebe o bônus (exceto este , mas com o bônus é uma pontuação pior do que sem), então esse é um bom indicador de que o desafio seria melhor sem o bônus.
Mego
@Mego Ele se encaixa no tema da pergunta e é fácil de entender. Não há mal nisso.
Fund Monica's Lawsuit

Respostas:

7

Pitão - 48 42 41 39 bytes

Will corda embalada.

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

Experimente online aqui .

Maltysen
fonte
Aceitando esta resposta porque esta pergunta foi [code-golf] e esta resposta é a mais curta. Bem feito!
Fund Monica's Lawsuit
4

JavaScript ES6, 170 bytes

É uma função anônima, nomeie-a. Nota: isso usa o método de classificação aleatória, que não é inteiramente aleatório , mas é suficiente, desde que você não seja um professor de probabilidade.

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`

`

Com o bônus, 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`

`

Teste!

Conor O'Brien
fonte
Você tentou ganhar o bônus?
CalculatorFeline
@CatsAreFluffy Não, net ainda;)
Conor O'Brien
11
@CatsAreFluffy Bem, é uma coisa altamente técnica ...
Conor O'Brien
3
O que é altamente? O que é uma coisa? O que é um técnico? O que é um ? O que é um ...? O que resta 493 caracteres?
CalculatorFeline
11
@ fond42518 O prazer é meu! No entanto, nesse tipo aleatório, estou salvando a função _=>.5-Math.random()na variável r, à qual me refiro posteriormente na quinta linha. Na verdade, estou realizando dois tipos aleatórios: um nos itens e outro nas perguntas. Se você quiser saber mais sobre o ES6, sugiro ler aqui .
Conor O'Brien
2

CJam, 54 53 55 52 bytes

Economizou 1 byte ao usar uma versão posterior (disponível no TIO). Ganhei 2 bytes porque esqueci de aleatoriamente a ordem das perguntas. Salva 2 bytes de outro bug corrigido no TIO.

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

Experimente online!

GamrCorps
fonte
Apenas dois bytes ganhos? o_O
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ lol sim, eu divido com base em perguntas no início, então adicionei o mroperador (randomize) para randomizar a ordem das perguntas antes que a lógica da resposta ocorra.
GamrCorps