Domanda

La classe Random in Ruby 1.9.2 è garantita per generare numeri casuali nello stesso ordine, data una particolare seme e gamma. Per esempio:

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

Ma supponiamo che io voglio per generare il numero successivo nella sequenza su un altro computer (senza ri-generare i numeri precedenti nella sequenza). Ciò dovrebbe essere possibile, data la precedente uscita. C'è un modo per farlo con la classe Random? O devo scrivere la mia realizzazione del Mersenne Twister ?

[ Modifica Come indicato nei commenti qui sotto, non è infatti possibile determinare lo stato di un'istanza Random appena dall'uscita, perché solo parte dello stato (in particolare, la low 32 bit) vengono utilizzati per l'uscita.]

È stato utile?

Soluzione

non può test, ma il generatore può essere dispiegate, secondo Marc-André Lafortune qui . Quindi questo lavoro potrebbe:

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top