Ein Freund hat eine Zusatzkarte in seinem Computer, die eine perfekte Zufallszahl von 1 bis einschließlich 5 generiert. Leider haben sie irgendwie Cola darauf verschüttet, und es werden nur noch 2er für alle Zahlen von 1 bis 4 generiert. Glücklicherweise bleibt die Zufälligkeit erhalten, aber 2 hat eine Wahrscheinlichkeit von 80% und 5 hat eine Wahrscheinlichkeit von 20%, und es gibt keine 1er, 3er oder 4er generiert. BrokenRand()
Schreiben Sie mit dieser Zufallsquelle (nennen Sie es oder ähnliches) einen funktionierenden Zufallszahlengenerator, der Zahlen von 1 bis 5 mit einer Wahrscheinlichkeit von 20% mit der gleichen perfekten Zufälligkeit wie die ursprüngliche Quelle erzeugt.
Kürzeste Sendung gewinnt. Bonuspunkte, die für die Mindestanzahl von Anrufen vergeben werden, die BrokenRand
von einer demografisch ausgewählten Beratungsfirma mit Fokus auf Kundenservice unparteiisch entgegengenommen werden, aufgeschlüsselt nach Alter und Geschlecht - dh ich.
quelle
Scala 79 Zeichen:
Für das echte Golfspiel wird der Alias "defektRNG brokenRand" in "b" umbenannt.
So funktioniert es: Meistens gibt b eine Folge von 2s zurück. Wenn Sie jedoch 5 Anrufe nach b tätigen, werden Sie sehr oft mit einem Ergebnis von 4x2 und 1x5 enden. Dies ist das zweitwahrscheinlichste Ereignis und kann 5-2-2-2-2, 2-5-2-2 sein -2, 2-2-5-2-2, 2-2-2-5-2 und 2-2-2-2-5.
Diesen ist gemeinsam, dass die Summe 4 * 2 + 5 = 13 ist. Der Index der ersten fünf kann verwendet werden, um eine gültige Zufallszahl zu definieren. Wenn es mehr oder weniger als eine 5 gibt, eine Summe größer oder kleiner 13, wiederholen Sie.
Ein Zähler in 'rnd' oder 'r' kann anzeigen, wie viele Anrufe durchschnittlich erforderlich sind, um die Nummern zu produzieren. Es gibt 121 200 Anrufe für 50 000 Zufallszahlen, was nicht beeindruckend ist. :)
quelle
> <> (Fisch) - 55 Bytes
Aktualisiert, um den gleichen Algorithmus wie @user zu verwenden, der in seiner Scala-Antwort unbekannt ist
Es wird erwartet, dass der defekte Generator an stdin angeschlossen ist. Hier ist das Python-Skript, das ich verwendet habe . Der Code stimmt mit der aktuellen Fish-Spezifikation überein, aber ich habe eine modifizierte Version des alten Interpreters verwendet.
Ich würde ein größeres Sample machen, aber es ist langsam.
quelle
GolfScript, 23 Bytes
Späte Antwort, aber da dies zufällig auf der Titelseite auftauchte ...
Verwendet den gleichen Algorithmus wie die Scala-Lösung des Benutzers unknown . Es wird davon ausgegangen, dass der voreingenommene Zufallszahlengenerator als benannte GolfScript-Unterroutine angegeben ist
r
. Sie können einen geeigneten voreingenommenen RNG selbst definieren, z. B .:Hier ist ein kurzer Test, der zeigt, dass es an Voreingenommenheit mangelt. Leider ist der Online-GolfScript-Server etwas langsam, so dass ich die Demo auf nur 100 Samples reduzieren musste, um sie pünktlich fertigzustellen. Wenn Sie den Test lokal mit dem GolfScript-Interpreter ausführen , erhöhen Sie den Wert
100*
auf1000*
oder sogar10000*
.(Der GolfScript-Server friert auch manchmal nach dem Zufallsprinzip ein und es tritt trotzdem eine Zeitüberschreitung auf. Wenn dies bei Ihnen auftritt, wird dies normalerweise durch einen erneuten Versuch behoben. Dies geschieht auch mit anderem Code und nur auf dem Server, nicht auf meinem eigenen Computer. Ich bin also zuversichtlich dass es ein Problem mit dem Server ist und nicht mit meinem Code.)
quelle
Javascript, 160 Zeichen ohne Einschränkung der Lesbarkeit aka Optimierung
quelle
BrockenBand()
du erklären, was dann ist?BrockenRand
function giveRandom(){return Math.ceil(Math.random()*5)}