数値を入力として受け取り、別の数値を返す疑似乱数ジェネレータが必要です。ウィッチは再現可能で、ランダムのようです。
- 各入力番号は正確に1つの出力番号と一致する必要があり、その逆も同様です。
- 同じ入力番号は常に同じ出力番号になります
- 互いに近い連続した入力番号(例:1と2)は、完全に異なる出力番号を生成する必要があります(例:1 => 9783526、2 => 283)
完璧であってはなりません。ランダムで再現性のあるテストデータを作成するだけです。
私はC#を使用しています。
私はこの面白いコードを少し前に書いたので、ランダムなものが生成されました。
public static long Scramble(long number, long max)
{
// some random values
long[] scramblers = { 3, 5, 7, 31, 343, 2348, 89897 };
number += (max / 7) + 6;
number %= max;
// shuffle according to divisibility
foreach (long scrambler in scramblers)
{
if (scrambler >= max / 3) break;
number = ((number * scrambler) % max)
+ ((number * scrambler) / max);
}
return number % max;
}
私は、より良い、より信頼性の高い、任意のサイズの数値(最大引数なし)で動作するものが欲しいです。
これはおそらくCRCアルゴリズムを使用して解決できますか?または、少しシャッフルするもの。