Latar Belakang
Saya memiliki koleksi "kaus kaki hari kerja", yang merupakan tujuh pasang kaus kaki yang dilabeli oleh hari-hari dalam seminggu. Ketika saya mencuci kaus kaki saya, mereka berakhir di tumpukan, dan saya harus mengaturnya menjadi pasangan yang benar sebelum memasukkannya ke dalam lemari. Strategi saya adalah menarik satu kaus kaki acak dari tumpukan sekaligus dan meletakkannya di laci. Setiap kali ada sepasang kaus kaki yang serasi di laci, aku mengikatnya dan meletakkannya di lemari. Tugas Anda adalah untuk mensimulasikan proses acak ini dan mengembalikan jumlah undian yang diperlukan untuk menemukan pasangan yang cocok pertama.
Memasukkan
Input Anda adalah bilangan bulat N ≥ 1 . Ini mewakili "jumlah hari dalam seminggu": ada N pasang kaus kaki di tumpukan, dan masing-masing pasangan memiliki label yang berbeda. Jika perlu, Anda juga dapat mengambil seed PRNG sebagai input.
Keluaran
Output Anda adalah jumlah kaus kaki yang harus saya gambar sebelum pasangan yang cocok pertama kali ditemukan. Misalnya, jika dua kaus kaki pertama sudah membentuk pasangan yang cocok, hasilnya adalah 2
.
Tentu saja, hasilnya acak, dan tergantung pada urutan gambar. Kami berasumsi bahwa semua pesanan penarikan memiliki kemungkinan yang sama , sehingga setiap kali kaus kaki ditarik, pilihannya seragam dan independen dari semua pilihan lainnya.
Contoh
Misalkan N = 3 , sehingga kita memiliki total 6 kaus kaki, berlabel AABBCC . Salah satu kemungkinan menjalankan "protokol sock-drawing" adalah sebagai berikut:
| Pile | Drawer | Pairs
Begin | AABBCC | - | -
Draw B | AABCC | B | -
Draw C | AABC | BC | -
Draw B | AAC | C | BB
Draw A | AC | AC | BB
Draw A | C | C | AA BB
Draw C | - | - | AA BB CC
Pasangan yang cocok pertama ditemukan setelah menggambar B kedua , yang merupakan kaus kaki ketiga yang harus ditarik, sehingga output yang benar adalah 3
.
Aturan dan penilaian
Anda dapat menulis program atau fungsi lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan. Input dan output dapat dalam format yang masuk akal, termasuk unary (string 1
s).
Anda dapat berasumsi bahwa RNG bawaan bahasa Anda sempurna. Anda tidak harus benar-benar mensimulasikan protokol sock-drawing, selama output Anda memiliki distribusi probabilitas yang benar.
"Uji kasus"
Berikut adalah perkiraan probabilitas semua keluaran untuk input N = 7 :
Output 2 3 4 5 6 7 8
Probability 0.077 0.154 0.210 0.224 0.186 0.112 0.037
Untuk menguji solusi Anda, Anda dapat menjalankannya untuk, katakanlah, 40.000 kali dan lihat apakah distribusi output cukup dekat dengan ini.
Draw all socks. End up with an odd number.