2016-08-31 3 views
1

数学で何か助けが必要です。親のシード値から派生したシード値を生成しています。親/シード番号を指定して擬似乱数を派生させる方法 - 親番号が持つすべての基準に適合する

次の規則に従う番号xを与えられた数yを導き出す必要があります。与えられたxの

  1. x = math.random(1000, 9999)
  2. 、Yは一定です。すなわち、 y = f(x)
  3. 必ずしもxに続くものではありません。つまり、xが大きくなるとyの値は大きくなり、xが小さくなるとyの値は小さくなる必要がありません。例えば、 。 x = 1234であり、次の反復でx = 3456の場合、成長する必要はありません。実際、yは擬似乱数であることが望ましいでしょう。

    y = tonumber(string.reverse(x)) 
    

    すなわち:

  4. yはまた、私は次の関数のために行ってきました早い段階で範囲(1000年、9999)

です。もしx = 1234ならばy = 4321

しかし、2つの数字の間には直接的な相関関係があり、その結果、私の地形はあまりにも対称的に見えます。

+1

だから、基本的にハッシュ関数が欲しいですか? – hjpotter92

+0

最終的には、任意の 'x'の場合と同様に直接相関が得られますが、' y'の固定値が得られます。 – hjpotter92

+0

ハッシュ関数かどうかは不明です。しかし、ええ、私は、出力yが可能な限りxとの小さな相関を持つことを望みます。 –

答えて

2

xの生成値をmath.randomseed関数に戻すことができます。 RNGは、同じ値xがseedに渡された場合、常に同じ値のyを生成します。

ので、何かのように:

math.randomseed(os.time()) 
local r = math.random 
local x = r(1000, 9999) 
math.randomseed(x) 
local y = r(1000, 9999) 

が、それは一例として、機能するかどうかをテストするために、あなたはシードとして5668(またはx)を使用することができ、そしてyのために、あなたは常に3612返されます。あなたもそれをテストすることができますhttps://lua.org/demo.html

+0

私は本当にこれが好きです。とてもシンプルで、私の問題を完璧に解決します。 –

関連する問題