Hintergrund
Ich habe eine Sammlung von "Wochentagssocken", bei denen es sich um sieben Paar Socken handelt, die nach Wochentagen gekennzeichnet sind. Wenn ich meine Socken wasche, landen sie auf einem Stapel, und ich muss sie in die richtigen Paare sortieren, bevor ich sie in den Schrank lege. Meine Strategie ist es, eine zufällige Socke nach der anderen vom Stapel zu ziehen und in eine Schublade zu legen. Immer wenn es ein passendes Paar Socken in der Schublade gibt, binde ich sie zusammen und lege sie in den Schrank. Ihre Aufgabe ist es, diesen zufälligen Prozess zu simulieren und die Anzahl der Ziehungen zurückzugeben, die erforderlich sind, um das erste passende Paar zu finden.
Eingang
Ihre Eingabe ist eine ganze Zahl N ≥ 1 . Es stellt die "Anzahl der Tage in einer Woche" dar: Es befinden sich N Paar Socken auf dem Stapel, und jedes Paar hat ein eigenes Etikett. Bei Bedarf können Sie auch einen PRNG-Startwert als Eingabe verwenden.
Ausgabe
Ihre Ausgabe ist die Anzahl der Socken, die ich ziehen muss, bevor das erste passende Paar gefunden wird. Wenn beispielsweise die ersten beiden Socken bereits ein übereinstimmendes Paar bilden, lautet die Ausgabe 2
.
Natürlich ist die Ausgabe zufällig und hängt von der Zeichenreihenfolge ab. Wir gehen davon aus, dass alle Zeichenreihenfolgen gleich wahrscheinlich sind , sodass die Auswahl bei jedem Ziehen einer Socke einheitlich und unabhängig von allen anderen Optionen ist.
Beispiel
Es sei N = 3 , so dass wir insgesamt 6 Socken mit der Bezeichnung AABBCC haben . Ein möglicher Durchlauf des "Strumpfziehprotokolls" ist wie folgt:
| 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
Das erste übereinstimmende Paar wurde nach dem Zeichnen des zweiten B gefunden , das die dritte zu zeichnende Socke war, sodass die richtige Ausgabe vorliegt 3
.
Regeln und Wertung
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig. Eingabe und Ausgabe können in jedem vernünftigen Format erfolgen, einschließlich unär (Zeichenfolge von 1
s).
Sie können davon ausgehen, dass das in Ihrer Sprache integrierte RNG perfekt ist. Sie müssen das Strumpfziehprotokoll nicht wirklich simulieren, solange Ihre Ausgaben die richtige Wahrscheinlichkeitsverteilung haben.
"Testfälle"
Hier sind die ungefähren Wahrscheinlichkeiten aller Ausgänge für den Eingang 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
Um Ihre Lösung zu testen, können Sie sie beispielsweise 40.000 Mal ausführen und feststellen, ob die Ausgabeverteilung annähernd in der Nähe liegt.
Draw all socks. End up with an odd number.