如何导出一个伪随机数,给定一个 parent/seed 数字 - 符合父数字的所有标准

How to derive a pseudo random number, given a parent/seed number - which fits all criteria the parent number has

我需要一些数学方面的帮助。我正在从父种子值生成派生种子值。

我需要根据给定的数字 x 推导出一个数字 y,它遵循以下规则。

  1. x = math.random(1000, 9999)
  2. 对于给定的 x,y 是常数。 IE。 y = f(x)
  3. y 不一定跟在 x 之后。即当x 增长时y 不需要增长,而当x 减少时y 不需要减少。 例如。如果 x = 1234 并且在下一次迭代中 x = 3456 那么 y 也不需要增长。事实上 y 最好是一个伪随机数。
  4. y 也在 (1000, 9999) 范围内

早些时候我去了以下功能:

y = tonumber(string.reverse(x))

即。如果 x = 1234 那么 y = 4321

然而,这两个数字之间存在直接相关性,因此我的地形看起来太对称了。

您可以将 x 的生成值传递回 math.randomseed 函数。对于传递给种子的 x 的相同值,RNG 将始终生成相同的 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. You can even test it on https://lua.org/demo.html