Acak tes ini

21

Saya seorang guru , dan dalam beberapa hari saya harus memberi siswa saya ujian. Sekarang, saya selalu khawatir tentang murid-murid terindah saya yang terluka oleh yang paling tidak menyenangkan ketika mereka curang, jadi saya ingin mengacak tes sehingga tidak ada yang bisa menipu siapa pun.

Saat ini, tes saya disimpan dalam format ini:

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

Yaitu, pertanyaan dipisahkan oleh satu baris kosong, dan jawabannya semua didahului oleh dua spasi. Ini adalah output yang saya butuhkan:

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

Yaitu, setiap jawaban pada pertanyaan dalam urutan acak, dan urutan pertanyaan diacak juga. Perlu diingat bahwa jika pilihan jawaban adalah "Tidak ada yang di atas", itu harus tetap di bagian bawah. Setiap pertanyaan selalu memiliki empat jawaban, dan "Tidak satu pun di atas" hanya akan muncul sebagai pilihan jawaban terakhir - dan tidak pernah muncul sebagai substring dari pilihan jawaban yang bukan "Tidak satu pun di atas". Sayangnya, saya tidak dapat menulis ulang semua tes saya, jadi Anda harus mengambilnya dalam format itu. Juga, murid-murid saya harus bisa membacanya, jadi saya tidak bisa mengambil output dengan cara lain (kecuali seperti yang dijelaskan di bawah).

Saya tidak perlu itu menjadi acak sempurna. Selama dekat.

Celah standar dilarang.


Bonus

Sekarang, murid-murid saya sudah terbiasa dengan format sederhana itu, tetapi jika Anda dapat membuatnya terlihat seperti ini ...

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

Saya akan mengambil potongan 25% dari skor akhir Anda. Anda akan mendapatkan input dengan cara yang sama.

Yaitu, jika Anda memberi nomor pertanyaan dan memberi label jawabannya. Harap diingat bahwa pertanyaan harus dimulai dari 1, dan jawabannya dari A ke D.


NB: Contoh-contoh berbeda dari yang ada di jawaban karena saya mengubahnya setelah fakta. Contoh-contoh spesifik bukanlah intinya; jawaban harus bekerja dengan pertanyaan sewenang-wenang.

Dana Gugatan Monica
sumber
Bonus dalam kode golf umumnya tidak disarankan . Tidak ada dari pengajuan saat ini mengambil bonus (kecuali yang ini , tetapi dengan bonus adalah skor lebih buruk daripada tanpa), jadi itu indikator yang cukup bagus bahwa tantangan akan lebih baik tanpa bonus.
Mego
@Mego Ini sesuai dengan tema pertanyaan dan mudah dimengerti. Tidak ada salahnya.
Dana Gugatan Monica

Jawaban:

7

Pyth - 48 42 41 39 byte

Akan dikemas string.

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

Cobalah online di sini .

Maltysen
sumber
Menerima jawaban ini karena pertanyaan ini [kode-golf] dan jawaban ini adalah yang terpendek. Sudah selesai dilakukan dengan baik!
Dana Gugatan Monica
4

JavaScript ES6, 170 byte

Apakah fungsi anonim, beri nama. Catatan: ini menggunakan metode pengurutan acak, yang tidak sepenuhnya acak , tetapi cukup, asalkan Anda bukan guru probabilitas.

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`

`

Dengan 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`

`

Uji itu!

Conor O'Brien
sumber
Apakah Anda mencoba mencari bonus?
CalculatorFeline
@CatsAreFluffy Tidak, belum bersih;)
Conor O'Brien
1
@CatsAreFluffy Ya, ini sangat teknis ... hal.
Conor O'Brien
3
Apa yang sangat? Apa itu? Apa itu teknis? Apa itu ? Apa itu ...? Apa yang tersisa 493 karakter?
CalculatorFeline
1
@ fond42518 Dengan senang hati! Namun, dalam pengurutan acak, saya menyimpan fungsi _=>.5-Math.random()ke variabel r, yang saya referensi kemudian di baris kelima. Saya sebenarnya melakukan dua macam acak: satu pada item, dan yang lainnya pada pertanyaan. Jika Anda ingin mempelajari lebih lanjut ES6, saya sarankan membaca di sini .
Conor O'Brien
2

CJam, 54 53 55 52 byte

Disimpan 1 byte dari menggunakan rilis yang lebih baru (tersedia pada TIO). Memperoleh 2 byte karena saya lupa mengacak urutan pertanyaan. Disimpan 2 byte dari bug lain yang diperbaiki pada TIO.

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

Cobalah online!

GamrCorps
sumber
Hanya dua byte yang diperoleh? o_O
Conor O'Brien
@ CᴏɴᴏʀO'Bʀɪᴇɴ lol ya, saya berpisah berdasarkan pertanyaan di awal, lalu saya tambahkan mroperator (mengacak) untuk mengacak urutan pertanyaan sebelum logika jawaban terjadi.
GamrCorps