2016-07-15 20 views
0

erstens die Sprache Im Schreiben in Knoten (Javascript), aber ich bin wirklich auf der Suche nach der Informatik dahinter, und wie man es tatsächlich tun, nicht nur den Code.Erstellen von großen Array/Daten aus Seed/Schlüssel

Im Grunde habe ich ein zweidimensionales Array von 2000 x 2000 (was ich damit meine, dass jeder Eintrag in dem 2000 Einträge langen Array seine eigenen 2000 Einträge hat). Innerhalb dieses Arrays habe ich die Werte 0, 1, 2, 3, usw. Sie sind unterschiedlich verteilt, mit unterschiedlichen Raritäten, wie häufig sie erscheinen. Was ich tun möchte, ist dieses Array basierend auf einem Schlüssel zu generieren, idc wie lange der Schlüssel/Seed ist, nur eine vernünftige Länge, die die Arbeit erledigen kann. Ich möchte, dass derselbe Schlüssel das gleiche Array generiert, wenn es denselben Schlüssel hat, und einen anderen, wenn es sich um einen anderen Schlüssel handelt. Nehmen Sie grundsätzlich einen Schlüssel und erzeugen Sie längere Daten, ohne dass in diesen Daten erkennbare Muster erscheinen.

Meine Gedanken zu diesem ist es, einen Schlüssel zu haben, der eine Art von Dezimalzahl ist, multipliziere ich gegen eine Reihe von Konstanten, um eine Position im Array zu bekommen, aber tbh Ich habe wirklich keine Ahnung, wo ich anfangen soll. Im Wesentlichen ist es so, als ob minecraft einen Samen nimmt und in eine Karte umwandelt und derselbe Samen wird wieder eine identische Karte erzeugen.

+0

könnten Sie ein Beispiel einfügen, um Ihre Anforderungen zu verdeutlichen? –

Antwort

1

Jeder Zufallszahlengenerator (RNG), der ausgesät werden kann, wird die gleiche Reihe von zufälligen Werten für einen gegebenen Seed geben & sollte kein bestimmbares Muster haben. Leider the default RND for javascript is not seedable; gemäß dieser SE-Post, you will need to write your own or use a someone else's.

Sobald Sie einen säenfähigen RNG haben, erhalten Sie für jeden Eintrag zuerst einen zufälligen Wert & dann konvertieren Sie den Zufallswert in den gewünschten Ausgabewert. Es gibt verschiedene Möglichkeiten, die Konvertierung durchzuführen. wenn Sie nur ein paar haben, würde ich so etwas tun (übernimmt random_value zwischen 0 & 1):

if(rand_value <= 70){ 
    output_value = 1; 
} 
else if(rand_value <= 90){ 
    output_value = 2; 
} 
else if(rand_value <= 97){ 
    output_value = 3; 
} 
else { 
    output_value = 4 
} 

Dies ergibt eine 70%, 20%, 7% & 3% auf eine 1,2 zu bekommen 3 bzw. 4; Passen Sie die Werte nach Bedarf an. Hinweis: Wenn Sie viele Ausgabewerte haben, sollten Sie Ihre Frage entsprechend bearbeiten, da es sauberere Wege gibt, dies zu lösen als ein riesiger Block.

+0

Danke, ich war verwirrt, was ein Zufallszahlengenerator war, aber jetzt merke ich, dass es genau das ist, was ich brauche – Ralph