Path: csiph.com!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Stefan Reuther Newsgroups: de.comp.lang.javascript Subject: Re: Zufallszahl mit vielen Nullen Date: Wed, 18 Sep 2019 18:50:40 +0200 Lines: 48 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: individual.net Wv1dSJQV/G8pBW0p/ofKnQEqeeKcFCO5UBgyxlIhznCfIYlDNg Cancel-Lock: sha1:hCA7KRzCcqgSNZJ+lguiCIMKccY= User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 Hamster/2.1.0.1538 In-Reply-To: Xref: csiph.com de.comp.lang.javascript:5157 Am 17.09.2019 um 21:21 schrieb Micha Kuehn: > Ich habe mir gedacht: > 1. ich erzeuge eine beliebige Zufallszahl in diesem Bereich. > 2. ich mache einen String daraus, weil man dann direkter auf die > einzelnen Stellen zugreifen kann. > 3. ich erzeuge eine n-elementige Menge von Zufallszahlen im Bereich 1 > bis anzahlstellen der Zahl. Menge heißt hier: diese n Zahlen dürfen sich > nicht doppeln. > 4. Die entsprechenden Stellen der Zufallszahl überschreibe ich mit "0". > 5. Aus diesem String mache ich wieder eine Zahl. > > Wie geht Schritt 3? Wie kann ich n sich nicht wiederholende > Zufallszahlen von 1-anzstellen ziehen? Gibt es Mengen in JavaScript? Mach ein Array mit all den Zahlen und zieh Elemente daraus. // Array mit den Zahlen 0 .. 99 var a = Array.from(Array(100).keys()); // Ziehe 20 aus 100 ohne Wiederholungen for (var i = 0; i < 20; ++i) { console.log(a.splice(Math.random()*a.length|0, 1)[0]); } ('Math.random()*a.length' = zufälliger Index für das verbleibende Array, '|0' = Math.trunc(), 'splice' = Element aus dem Array rausschneiden und zurückgeben) > Oder gibt es für mein Vorhaben einen ganz anderen, besseren Ansatz? Den Schritt 5 solltest du auf jeden Fall weglassen. JavaScript-Zahlen haben nur begrenzte Genauigkeit, konkret: 53 Bits. >> Math.pow(2, 53)-1 <- 9007199254740991 >> Math.pow(2, 53) <- 9007199254740992 >> Math.pow(2, 53)+1 <- 9007199254740992 Wenn du eh ein Zahlwort draus machen willst, wirst du das Ergebnis eh in Dreier-/Sechsergruppen verarbeiten, und das geht am besten als String. Insofern wäre auch zu überlegen, den Schritt 1 gleich als String auszuführen. Stefan