diff --git a/src/main/kotlin/ru/dbotthepony/kommons/random/JSF32Random.kt b/src/main/kotlin/ru/dbotthepony/kommons/random/JSF32Random.kt index ffda6e2..334708e 100644 --- a/src/main/kotlin/ru/dbotthepony/kommons/random/JSF32Random.kt +++ b/src/main/kotlin/ru/dbotthepony/kommons/random/JSF32Random.kt @@ -29,6 +29,15 @@ open class JSF32Random protected constructor( * [https://www.pcg-random.org/posts/bob-jenkins-small-prng-passes-practrand.html](https://www.pcg-random.org/posts/bob-jenkins-small-prng-passes-practrand.html) */ constructor(seed: Int) : this(SEED0_INIT, seed, seed, seed, null) { + reinitialize(seed) + } + + protected fun reinitialize(seed: Int) { + s0 = SEED0_INIT + s1 = seed + s2 = seed + s3 = seed + for (i in 0 until 20) round() } diff --git a/src/main/kotlin/ru/dbotthepony/kommons/random/JSF64Random.kt b/src/main/kotlin/ru/dbotthepony/kommons/random/JSF64Random.kt index 8dae01d..84f9a71 100644 --- a/src/main/kotlin/ru/dbotthepony/kommons/random/JSF64Random.kt +++ b/src/main/kotlin/ru/dbotthepony/kommons/random/JSF64Random.kt @@ -1,5 +1,6 @@ package ru.dbotthepony.kommons.random +import ru.dbotthepony.kommons.random.JSF32Random.Companion import java.util.random.RandomGenerator /** @@ -34,6 +35,15 @@ open class JSF64Random( * [https://www.pcg-random.org/posts/bob-jenkins-small-prng-passes-practrand.html](https://www.pcg-random.org/posts/bob-jenkins-small-prng-passes-practrand.html) */ constructor(seed: Long) : this(SEED0_INIT, seed, seed, seed, null) { + reinitialize(seed) + } + + protected fun reinitialize(seed: Long) { + s0 = SEED0_INIT + s1 = seed + s2 = seed + s3 = seed + for (i in 0 until 20) round() } diff --git a/src/main/kotlin/ru/dbotthepony/kommons/random/ShishuaRandom.kt b/src/main/kotlin/ru/dbotthepony/kommons/random/ShishuaRandom.kt index c01c80b..248582b 100644 --- a/src/main/kotlin/ru/dbotthepony/kommons/random/ShishuaRandom.kt +++ b/src/main/kotlin/ru/dbotthepony/kommons/random/ShishuaRandom.kt @@ -27,6 +27,22 @@ open class ShishuaRandom() : RandomGenerator { engine.initialize(longArrayOf(rng.nextLong(), rng.nextLong(), rng.nextLong(), rng.nextLong())) } + protected fun reinitialize(seed: Long) { + val rng = PCG32Random(seed) + engine.initialize(longArrayOf(rng.nextLong(), rng.nextLong(), rng.nextLong(), rng.nextLong())) + index = 16 + } + + protected fun reinitialize(seed0: Long, seed1: Long, seed2: Long, seed3: Long) { + engine.initialize(longArrayOf(seed0, seed1, seed2, seed3)) + index = 16 + } + + protected fun reinitialize(seed: LongArray) { + engine.initialize(seed) + index = 16 + } + protected fun round(): Long { if (index == 16) { index = 0