Arka fon
Haftanın günleri ile etiketlenmiş yedi çift çorap olan "hafta içi çorapları" koleksiyonum var. Çoraplarımı yıkadığımda, bir yığınla bitiyorlar ve dolaba koymadan önce onları doğru çiftlere yerleştirmeliyim. Stratejim, bir kerede kazıktan bir rastgele çorap çekmek ve bir çekmeceye koymak. Çekmecede eşleşen bir çift çorap olduğunda, onları birbirine bağlarım ve dolaba koyarım. Göreviniz bu rastgele işlemi simüle etmek ve ilk eşleşen çifti bulmak için gerekli çekiliş sayısını döndürmektir.
Giriş
Girişiniz N ≥ 1 tamsayısıdır . "Bir haftadaki gün sayısını" temsil eder: yığınta N çift çorap vardır ve her çiftin ayrı bir etiketi vardır. Gerekirse, giriş olarak bir PRNG tohumu da alabilirsiniz.
Çıktı
Çıktınız, ilk eşleşen çift bulunmadan önce çizmem gereken çorap sayısıdır. Örneğin, ilk iki çorap zaten eşleşen bir çift oluşturuyorsa, çıktı olur 2.
Tabii ki, çıktı rastgele ve çizim sırasına bağlıdır. Tüm çizim siparişlerinin eşit derecede olası olduğunu varsayıyoruz , böylece bir çorap her çekildiğinde, seçim tek tiptir ve diğer tüm seçimlerden bağımsızdır.
Misal
Let N = 3 biz toplam 6 çorap, etiketli olması böylece, aabbcc . "Çorap çekme protokolünün" olası bir çalışması aşağıdaki gibidir:
| 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
İlk eşleşen çift, çizilecek üçüncü çorap olan ikinci B'nin çizilmesinden sonra bulundu , böylece doğru çıktı 3.
Kurallar ve puanlama
Tam bir program veya işlev yazabilirsiniz. En düşük bayt sayısı kazanır ve standart boşluklara izin verilmez. Giriş ve çıkış, tekli ( 1s dizeleri ) dahil olmak üzere herhangi bir makul biçimde olabilir .
Dilinizin yerleşik RNG'sinin mükemmel olduğunu varsayabilirsiniz. Çıktılarınız doğru olasılık dağılımına sahip olduğu sürece, çorap çekme protokolünü simüle etmek zorunda değilsiniz.
"Test senaryoları"
N = 7 girişi için tüm çıkışların yaklaşık olasılıkları şunlardır :
Output 2 3 4 5 6 7 8
Probability 0.077 0.154 0.210 0.224 0.186 0.112 0.037
Çözümünüzü test etmek için, örneğin 40 000 kez çalıştırabilir ve çıktı dağıtımının buna oldukça yakın olup olmadığını görebilirsiniz.
Draw all socks. End up with an odd number.