Question

La classe Random en Ruby 1.9.2 est garanti pour générer des nombres aléatoires dans le même ordre, étant donné une graine et plage particulière. Par exemple:

r = Random.new(23)
r.rand(100)         # 83
r.rand(100)         # 40

Mais je suppose que veux générer le numéro suivant dans la séquence sur un autre ordinateur (sans re-générer les numéros précédents dans la séquence). Cela devrait être possible, compte tenu de la sortie précédente. Est-il possible de le faire avec la classe Random? Ou dois-je écrire ma propre mise en œuvre du Mersenne Twister ?

[ Modifier Comme indiqué dans les commentaires ci-dessous, il est en effet possible de déterminer l'état d'une instance de Random juste à la sortie, du fait qu'une partie seulement de l'Etat (en particulier, la bas 32 bits) sont utilisés pour la sortie.]

Était-ce utile?

La solution

ne peut pas tester, mais le générateur peut être classé, selon Marc-André Lafortune ici . Ainsi, ce travail pourrait:

r = Random.new(23)
r.rand(100)         # 83
r.rand(100)         # 40

File.open("/path/to/file","w") do |f|
  Marshal.dump(r,f)
end

# later, may be on another computer

File.open("/path/to/file","r") do |f|
  @v = Marshal.load(f)
end

puts @v.rand(100)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top