Пытаемся сломать игру «7 на 9»

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Сегодня будет маленький этюд просто понять, интересно ли вам такое. В общем, есть такой дядька Алексей Савватеев, который читает потрясающий курс по теории игр. Он же написал книгу «Математика для гуманитариев», где очень тонко постебался над всеми гуманитариями. Просто это как раз та математика, где числа из формул стремительно пропадают. И вот в один прекрасный момент я притащил ему игру «7 на 9» и попросил её сломать.

Принцип игры простой: в середину стола бросаются карты. На каждой карте число и разница. Например, 6 плюс-минус 2 — сверху можно бросить 8 или 4. Задача — как можно быстрее скинуть все свои карты в центр. Очерёдности ходов нет, ничего нет, просто кто успел — тот и бросил карту. Карты по одной из своей колоды вынимаются на руку, можно брать любое количество. Хоть все. Главное, чтобы пальцев хватило.

Вот что получилось, видео:


Теперь расскажу словами, что это было (можно не читать, если вы смотрели видео).

Первая гипотеза


Можно сортировать карты по цветам. Цвет определяет разницу: зелёные дают плюс-минус 1, синие плюс-минус 2, красные плюс-минус 3. Дальше задача просто найти подходящий момент, бросить туда зелёную карту, побросать все остальные зелёные быстро-быстро (напомню, они отличаются на 1, то есть очень легко сортируются), а потом как пойдёт.

Почему это хорошо — потому что противники не успевают считать карту и правильно подумать, пока вы их выбрасываете. Любые связки с руки играются почти непрерывно и дают преимущество в том, что противник (или противники) всё это время тщательно втыкают. Точнее, переоценивают ситуацию и каждый раз считают её заново.

Вторая гипотеза


Предполагается, что можно собрать на руке из всех карт буфер, который в нужный момент будет спущен на стол. То есть выстроить ряд именно в руках, а потом одну за другой выложить карты, то вы победите одним мастерским действием.

Третья гипотеза


Надо играть как получается, просто выкладывая карты по ситуации.

На видео мы попробовали все три способа в игре втроём и два способа (второй и третий) в игре вдвоём. Игра в реакцию побеждает (это же подтвердилось ещё примерно 20 опытами) в части случаев.

Игра в буфер даёт неоспоримое преимущество в следующих ситуациях:

  1. Если вы играете строго вдвоём, то вы, фактически, оба собираете этот самый буфер карт, идущих подряд из руки. Только тот, кто играет на реакцию, собирает это самым быстрым жадным алгоритмом, а вы собираете чем-то более сложным, что позволяет получить большую вероятность использования почти всех карт с руки.
  2. Когда оппонент загонит себя в ситуацию, что больше карты он класть не может (обычно это случается при 3-5 картах у него на руке), надо потратить 10 минут на составление своей победной комбинации и выложить её.

Реалистичный сценарий? Вполне. Игра, конечно, убивается к чёрту как процесс, но мы же здесь её ломать, а не получать удовольствие.

В чём проблема? В том, что как мы видим в примере второй игры, Макс (оппонент Алексея, применяющего тактику кэширования буфера) понял, что сейчас случится, и просчитал оптимальные ситуации перехвата для себя. И успел вставить карту между действиями Алексея, чем поломал ему весь буфер.

Перехват буфера можно делать только так, чтобы сбивать буфер. То есть почти не имеет смысла перехватывать зелёную (Δ1) карту синей (Δ2). Предположим в буфере 4±1, потом 5±2. При перехвате 4±1 картой 3±2 оппонент просто продолжает свои действия.

Что происходит при игре втроём? Просто двое генерируют достаточное количество совпадений, чтобы выиграть или остаться с одной-двумя картами, что почти всегда означает верный перехват с победой.

В коробке 73 карты с числами, распределение 1-10 неравномерное. Одна карта ложится на стол. При игре на двоих мы получаем половину от 72 карт. То есть вероятность свести буфер не 100%. Поскольку для нас идеален не просто буфер со случайной карты (точнее, двух случайных — первой и последней, ведь буфер играется в обе стороны), а циклический буфер, гарантирующий победу, то на практике шансов ещё меньше. Фактически, дальше игра в нашем сценарии превращается в соревнование жадного алгоритма (второй игрок собирает максимально длинную цепочку на столе) и чего-то вроде отжига или ветвей и границ (у нас в руках). Как чисто исследовательская задача это интересно, но практический итог — лучше не ломать кайф другим и быстро считать, играя в эту игру.

Всё. Если вдруг вы хотите эту коробку, то знайте, что Алексей пробовал поставить свои книги к нам в сеть, но не смог (потому что договор поставки с физлица — это нереальный ад), и просто подарил нам 32 штуки. Мы с удовольствием подарим их в магазине на Таганской (по одной в руки), тем, кто скажет «Я от нашего общего друга Савватеева».

Курс про теорию игр вот. UPD: lexnekr советует ещё курс "Математика для всех".

Отдельно рекомендую короткое видео про дуэль трёх лиц:


Если вам интересно применение математики к играм, то мы продолжим попытками сломать что-то более сложное. И ещё это не всегда именно про математику, например, на вчерашних «поломочных» тестах мы пытались взять новую игру неожиданной договорённостью между игроками там, где договариваться, казалось бы, нельзя. Хотя это тоже часть теории игр и приложений.

Интересные статьи

Интересные статьи

«Пятнадцать», или «Пятнашка» — отличный пример простой логической игры, популярной во всем мире. Для того чтобы решить головоломку, необходимо расставить квадратики с цифрами по порядку, от ...
В 2012 году на северо-востоке Москвы начался пожар. Загорелось старое здание с деревянными перекрытиями, огонь быстро перекинулся на соседние дома. Пожарные расчеты не могли подобраться к мес...
В жизни каждого программиста бывали моменты, когда он мечтал сделать интересную игру. Многие программисты эти мечты реализовывают, и даже успешно, но речь сейчас не о них. Речь о тех, кто любит...
Несколько лет назад довелось мне попробовать свои силы в заманивании пытливых отроков в разработку микроэлектроники. А дальше было, как в известной пословице: «Коготок увяз — птичке пропасть!» Ос...
Язык C++ открывает обширные возможности для того, чтобы обходиться без макросов. Так давайте попробуем использовать макросы как можно реже! Сразу оговорюсь, что я не являюсь фанатиком и не ...