В общем, лучший способ "синхронизировать c" PRNG между двумя программами на разных языках - это реализовать один и тот же PRNG на обоих языках.
Для ваших целей, линейный конгруэнтный генератор (LCG) простой PRNG, если вы хотите только «что-то, что выглядит случайным (хотя это не обязательно должно быть безопасным)». Этот тип генератора тривиален для реализации как C#, так и Python.
Одним из примеров, среди многих других возможностей, является следующий 32-разрядный LCG (где x
- начальное число):
C#:
// Generate the next x from the current one.
unchecked {
// NOTE: x is an `int`
x = (0xadb4a92d * x) + 9999999;
}
Python:
# Generate the next x from the current one.
x = ((0xadb4a92d * x) + 9999999) & 0xFFFFFFFF
См. Раздел 8 самой недавней статьи Стила и Виньи для других вариантов параметров.
Однако LCG далеко не идеальны , (Например, вышеупомянутый LCG производит x
со слабыми младшими битами.) Если вы хотите другой выбор для PRNG, я перечислю многие из них .