Ситуация такая: Стол казино, на нем выпадает некая последовательность, выдаваемая павновским рандомом (известная функция). Этот рандом независим ни от чего другого. То есть последовательность выдаваемых чисел на столе 100% принадлежит только этому столу.
Проблема в том, что между выпадениями производится некоторое количество вызовов рандома впустую. У меня явно не хватает теоретических математических знаний
Вопрос: Как возможно найти эту последовательность и вычислить случайное количество пропусков?
Сейчас я написал скрипт, который использует базу из 300 выпавших на одном столе подряд значений. Проблема скрипта в том, что я вручную указываю максимальное количество пропусков между двумя числами. На данный момент при максимальном значении пропусков = 100 у меня находится одна единственная последовательность. Но нет гарантии, что максимум пропусков не могло быть больше 100. Повторюсь, число пропусков неизвестно.
А еще прикол в том, что как только база выпавших значений становится достаточно большой, скрипт перестает находить хотя бы одно совпадение. Делаем вывод, что использовано неверное максимальное число пропусков. Увеличиваю число и моментально находятся десятки возможных вариантов. Это, по моему, бесконечный (на практитке. В теории-то, конечный) цикл.
Сам сакрипт, если кому интересно:
[CODE]
#include
#include
#include
//https://github.com/pawn-lang/compiler/blob/master/source/amx/amxcore.c
#define INITIAL_SEED 0xcaa938dbL
static
unsigned
long
IL_StandardRandom_seed
=
INITIAL_SEED
;
/* always use a non-zero seed */
#define IL_RMULT 1103515245L
static
long
random
(
)
{
unsigned
long
lo
,
hi
,
ll
,
lh
,
hh
,
hl
;
unsigned
long
result
;
lo
=
IL_StandardRandom_seed
&
0xffff
;
hi
=
IL_StandardRandom_seed
>>
16
;
IL_StandardRandom_seed
=
IL_StandardRandom_seed
*
IL_RMULT
+
12345
;
ll
=
lo
*
(
IL_RMULT
&
0xffff
)
;
lh
=
lo
*
(
IL_RMULT
>>
16
)
;
hl
=
hi
*
(
IL_RMULT
&
0xffff
)
;
hh
=
hi
*
(
IL_RMULT
>>
16
)
;
result
=
(
(
ll
+
12345
)
>>
16
)
+
lh
+
hl
+
(
hh