sfondo
Ho una collezione di "calze nei giorni feriali", che sono sette paia di calze etichettate dai giorni della settimana. Quando lavo i miei calzini, finiscono in un mucchio e devo sistemarli nelle coppie giuste prima di metterli nell'armadio. La mia strategia è quella di estrarre una calza a caso dalla pila e metterla su un cassetto. Ogni volta che c'è un paio di calzini abbinati sul cassetto, li lego insieme e li metto nell'armadio. Il tuo compito è simulare questo processo casuale e restituire il numero di pareggi richiesti per trovare la prima coppia corrispondente.
Ingresso
Il tuo input è un numero intero N ≥ 1 . Rappresenta il "numero di giorni in una settimana": ci sono N paia di calze nella pila e ogni coppia ha un'etichetta distinta. Se necessario, puoi anche prendere un seme PRNG come input.
Produzione
Il tuo output è il numero di calze che devo disegnare prima che venga trovata la prima coppia corrispondente. Ad esempio, se le prime due calze formano già una coppia corrispondente, l'output è 2
.
Naturalmente, l'output è casuale e dipende dall'ordine di disegno. Partiamo dal presupposto che tutti gli ordini di disegno sono ugualmente probabili , quindi ogni volta che viene disegnato un calzino, la scelta è uniforme e indipendente da tutte le altre scelte.
Esempio
Sia N = 3 , in modo da avere 6 calze in totale, etichettato AABBCC . Una possibile esecuzione del "protocollo di disegno del calzino" è la seguente:
| 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
La prima coppia corrispondente è stata trovata dopo aver disegnato la seconda B , che era la terza calza da disegnare, quindi l'output corretto è 3
.
Regole e punteggio
È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard. L'input e l'output possono essere in qualsiasi formato ragionevole, incluso unario (stringa di 1
s).
Puoi presumere che l'RNG integrato nella tua lingua sia perfetto. Non è necessario simulare effettivamente il protocollo di disegno del calzino, purché le uscite abbiano la distribuzione di probabilità corretta.
"Casi test"
Ecco le probabilità approssimative di tutte le uscite per l'ingresso 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
Per testare la tua soluzione, puoi eseguirla per, diciamo, 40.000 volte e vedere se la distribuzione dell'output è ragionevolmente vicina a questa.
Draw all socks. End up with an odd number.