Искусство бесить людей
Итак, представьте, что вы пишите интернет-казино или аналогичную хрень. Казино в основном зарабатывает на том, что мат.ожидание игроков отрицательное.
Но есть нюансы. Всегда хочется спиздить денег побольше. Например, можно нагло врать о том, что выпало игроку.
Защита через хэширование
Но с недавних пор приличные интернет-казино обзавелись механизмом, защищающем игроков от подобного произвола.
Подобный протокол выглядит примерно так:
- Перед игрой сервер генерирует случайные данные, участвующее в игре (например, для покера это будет информация о том);
- Данные хешируются (вместе с солью);
- Хеш отправляется игроку;
- После окончания игры соль раскрывается игроку;
- Игрок проверяет, что хеш был правильным.
Печально-грустно-ужасно-отвратительно. Как же нам обеспечить больший заработок при подобном протоколе? Как отбирать еще больше денег у тех, кто их явно не заслуживает?
Взломай человека
Итак, казино играет против человека в случайные игры. Типичная случайная игра подразумевает, что игрок должен воспользоваться генератором случайных чисел, чтобы обеспечивать себе хоть какое-то приближение мат.ожидания к нулю.
К счастью, люди в среднем тупы. Поэтому обычно они используют какое-то дурацкое предсказуемое правило.
Некоторые люди тупы, но не настолько как первые. Они пытаются генерировать случайные числа в уме. Эта тактика чуть лучше, но… Проблема в том, что из людей получаются хреновые генераторы случайных чисел.
Основная идея: человека можно предсказать. Можно тырить идеи реализации у автокомплитов и нейросеток.
Семпл
“Проверь свою предсказуемость”. Осторожно, грузится медленно из-за убожества stackblitz.io. И верстал мудак.
Примитивная игра. Нужно выбрать левую карту или правую. Код загадывает карту. Угадали — получили 11$. Не угадали — проиграли 10$. Положительное мат.ожидание. Вы должны выигрывать. Итак, получится ли у вас не уйти в глубокие минуса в долгосроке?
К сожалению, протокол защиты мне было лень реализовать. Поэтому вместо этого в момент “загадывания” карты происходит вывод в консоль.
Как работает
Идея реализации очень тупая, без нейросетей и понтов.
Для начала, мы можем логгировать все действия человека. Дальше мы можем посчитать, сколько раз он тыкал на левую карту или на правую. Если мы видим, что человек постоянно тыкает на левую карту, то мы будем загадывать исключительно правую. Симметрично для право/лево.
Если игрок слишком долго играет, то он может заметить, что игра мухлюет и перестроить стратегию. Поэтому старым наблюдениям нужно вводить какую-то пеню.
Если мы видим, что человек тыкает на левую карту в 75% случаев, то мы будем загадывать правую карту в 25%. Иначе игрок может нас раскусить и построить стратегию, которая это обламывает. Ок, нет, скорее всего правильно использовать не 25%, но кого это волнует?
Увы, если трекать частоты по одной карте, то игрок может тыкать карты поочередно, нивелируя наши достижения по сравнительно честному отъему денег у населения. Поэтому дальше мы будем трекать частоты по двум-трем картам (или больше).
Схема плюс-минус рабочая, но достаточно быстро ломается.