HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 29.01.2023, 01:20
Papercut
Познающий
Регистрация: 23.10.2006
Сообщений: 45
С нами: 10288693

Репутация: 9
По умолчанию

Ситуация такая: Стол казино, на нем выпадает некая последовательность, выдаваемая павновским рандомом (известная функция). Этот рандом независим ни от чего другого. То есть последовательность выдаваемых чисел на столе 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

minskips
)
{
if
(
pointer
==
0
)
seed
=
IL_StandardRandom_seed
;
skipsarr
[
pointer
]
=
skips
;
pointer
++
;
skips
=
0
;
}
skips
++
;
if
(
skips
>
maxskips
)
{
pointer
=
0
;
skips
=
0
;
}
}
printf
(
"Found skips. Seed: %u\n"
,
seed
)
;
IL_StandardRandom_seed
=
seed
;
for
(
int
x
=
0
;
x

 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.