Одно из изданий этой механики
Есть колода из 100 карт с натуральными числами от 1 до 100, каждого по одному. Вы и второй игрок берёте по 3 карты из этой колоды. Задача — одну за одной выложить их на стол в порядке возрастания. Но нельзя меняться информацией между собой и показывать карту до момента, пока она не будет положена на стол. То есть нельзя говорить, стучать по столу, подмигивать и так далее — ничего нельзя.
Если в конце игры 6 карт выложены правильно, оба игрока выигрывают. В момент, когда первая же карта ложится неправильно — оба игрока проигрывают.
Ваша задача — выиграть в этой игре. С вами играет человек, которого вы до этого не видели. Возможно, он даже не говорит на известных вам языках. Но он точно землянин. И он с большой вероятностью уже пробовал играть в эту игру с другими людьми сегодня. Какова ваша стратегия?
Не спешите под кат, сначала подумайте чуть-чуть, пожалуйста.
Сначала смотрим на транзакции и доступную информацию:
- Есть акт выкладывания карты — это, фактически, передача информации о том, что «это карта минимальная из тех, что у меня на руке, и я считаю её минимальной в принципе».
- Есть невыкладывание карты: это значит, что «я колеблюсь относительно гипотезы минимальности значения карты». Невыкладывание карты — это функция времени, то есть паузы между действиями тоже генерирует значимое событие.
- Есть визуальное расположение карты на руке — откуда именно из этих трёх карт она тащится. Скорее всего, эта информация пока шум, но она есть.
Теперь мы должны подумать о том, как правильно действовать в этой игре. Предположим, у вас есть карты:
11, 47, 93
На столе, фактически, лежит карта 0 (только её не видно), что позволяет нам уравнять первый ход с другими по условиям матмодели.
Карты оппонента мы не знаем.
Первое приближение
Первая стратегия — выкладывать карты по очереди со вторым игроком. По мере возрастания. В целом, учитывая распределение, это будет иметь какой-то смысл (по крайней мере, лучше, чем случайные действия).
Но в случае, если у второго игрока в руках набор вроде 5, 33, 41, естественно, это не сработает.
Второе приближение
Разбиваем интервал от 1 до 100 на 6 частей по количеству карт, получаем 16,(6). Считаем, что каждая следующая карта должна ложиться в этот интервал и кладём её, если она ложится, и не кладём, если нет. Если у нас две карты ложатся в этот интервал — кладём обе подряд.
Третье приближение
Начинаем считать матожидание появления следующей карты. Это значит, что чем больше интервал между нашими картами в руке, тем меньше вероятность выкладывания следующей карты с нашей стороны. Мы не выкладываем свою карту, если вероятность показывает, что действие должен сделать второй игрок.
Все три метода страдают очевидными недостатком: они не гарантируют победу.
Четвёртое приближение
Тут нам впервые начинает быть нужна помощь второго игрока. Мы должны залезть ему в голову и попытаться понять, как мыслит он. Скорее всего, он полуинтутивино или сознательно придёт к чему-то подобному — если непохоже, что карту надо выкладывать, то он будет ждать. Если похоже, то выложит сразу.
Например, если на столе карта 45, а у него есть карта 46 — очевидно, что он сделает это почти мгновенно.То есть дальше задача превращается в измерение функции времени между выкладкой карт. Но есть важный переход к тому, почему именно так.
Если мы положили 45, а у него есть 47 — тоже очевидно, что он сделает это мгновенно, потому что если бы у нас была 46, мы бы её сразу же и положили за 45.
Если у нас есть 48, а он не выложил 47 сразу — значит, можно класть 48.
Если он видит, что мы не выложили 48, а у него есть 49, то он кладёт её.
Переходим к взаимодействию игроков
Когда игроки не могут меняться информацией, в действие вступает интересная часть теории игр. Теория игр вообще странная штука, которая предполагает, что вокруг вас только и исключительно рациональные люди. И землянин, который играет с вами, тоже рациональный.
Теория игр предлагает следующий вариант: предположим, что вы могли бы договориться до игры. Как бы вы оба оптимально действовали?
А прикол в том, что рациональные люди при одних и тех же исходных данных не нуждаются в диалоге, чтобы договориться. Они могут точно предсказать действия друг друга.
То есть вопрос «о чём бы мы договорились» равен в этой ситуации вопросу «как бы вы оба оптимально действовали в принципе, если бы знали, что другой игрок тоже будет оптимально действовать?»
Цель-то у игроков одна.
Скорее всего, мы бы начали отсчитывать секунды от выкладки последней карты. Каждая новая означала бы, что наши следующие карты довольно дальше и дальше от последней выложенной. В идеальном случае если бы наша карта была на 15 единиц больше последней, а карта второго игрока — на 20 единиц, то мы бы выкладывали на 15-й секунде, а он бы — на 20-й секунде.
Что приводит нас к модели, когда можно играть вслепую и вообще без игроков. Раз уже мы решили считать секунды между выкладкой карт на то, чтобы давать шанс другому игроку сходить, то зачем останавливаться? Модель в финале на любое количество игроков выглядит так: каждый про себя отсчитывает время и выкладывает карту на текущем номере секунды. На 17-й секунде надо выложить карту 17, если она есть. И так далее. Для этого даже не нужно видеть никакие другие действия игроков. И даже знать, сколько их.
Так вы будете выигрывать всегда и гарантированно. Есть другие оптимальные стратегии, но они, в целом, слабее.
Почему такт — это секунда? Потому что мы с некоторой натяжкой пользуемся общим для землян фреймворком. Это может быть и день, и минута, но, согласитесь, это куда менее вероятно в общей ситуации.
Понимаете, что только что случилось? Мы создали в голове второго игрока, договорились с ним — и если он рационален, то он настоящий это понял и действует именно так, как договорено. Потому что он сделал то же самое — создал у себя в голове нас, договорился с нами и начал действовать.
То есть знание, что все в игре рациональны позволяет договариваться без передачи информации. Потому что есть чёткий критерий, к какой стратегии нужно идти.
Конечно, тут есть очевидная проблема.
Чуть в сторону от рационализма
Проблема в том, что игроки нерациональны. Люди вообще нерациональны, смиритесь с этим.
Мы играли в компании в игру «Загадай число от 1 до 100, и если оно будет равняться половине от среднезагаданного, ты выиграешь». Замрите на секудну и загадайте число, предполагая, что с вами играет весь Хабр, включая маркетологов, которые публикуют посты в корпоративных блогах.
Готово?
А прикол в том, что мы не знаем, станет ли кто-то так думать в принципе среди игроков. Нам нужен прогноз доли игроков, которые будут пользоваться такой стратегией. Ну и мы не знаем, сколько итераций в размышлениях игрок пройдёт. И мы даже не знаем, как умный игрок оценивает способность других игроков думать. То есть нам нужна поправка на то, что даже полностью рациональные люди внесли поправки на нерациональных.
В эту игру несколько раз играли в газетах. Обычно на практике результат (число, которое надо было загадывать) бывает в районе 4-15. Наше среднее было 16, то есть нужно было загадать 8, чтобы выиграть. У нас первый же игрок загадал 92. Я на него рассчитывал и полагался, зная результаты двух его последних переговоров.
Я в этой ситуации повёл себя неправильно с точки зрения теории, но выиграл. Причина — у меня был более реалистичный прогноз, чем тот, что даёт рациональная теория игр.
Поэтому следующий слой рационализма в игре в телепатию — предположить, насколько наш второй игрок способен повторить те же вычисления и скорректировать свою стратегию по этому. Например, скорее всего, может сложиться так, что он интуитивно поймёт разницу во времени, но не сможет разделить случаи с интервалом в 20 или 30 единиц от выложенной карты. Придётся подстраиваться на лету во время игры — по его ходам. Скорее всего, нам придётся выравниваться под его масштаб времени (нелинейную шкалу, похожую на квадратичную). Его нерациональные действия снизят наши общие шансы на победу, но наши действия помогут выправить то, что получится.
Разумеется, если бы мы ему объяснили про секунды, он бы понял и согласился (в подавляющем числе случаев). Но просто он может не понять. Или посчитать тактом что-то другое. Или в его культурном коде нет понятия времени. Или оно не такое, как у нас. Такова жизнь. Но мы сделали, что смогли, и пары с нами будут выигрывать чуть чаще, чем пары из двух нерациональных людей.
Возможно, если мы поймём, что он полностью неадекват, нам нужно будет переключить стратегию на расчёт матожидания его карты и своей карты.
Механика имеет несколько практических приложений. Например, если на игротеке отрубают свет, у аниматоров есть аварийная фишка: включить фонарь, сообщить всем, что сейчас фонарь выключится, и нужно по очереди досчитать до ста (это примерно половина от участников). Каждый может кричать только одно число один раз. Если сбились или выкрикнули одновременно два голоса — надо начинать с самого начала. Потом выключить фонарь, крикнуть «один» и пойти выяснять, что происходит. Обычно питание удаётся восстановить куда раньше, чем игроки досчитают. А поскольку им объяснили, как играть, мало кто пугается.
Комментарии (132)
Aracon
17.01.2019 11:13+1А по столу стучать нельзя? Это была следующая мысль после того, как додумал про карту в секунду.
Задача просто немного непонятно сформирована: из начала следует, что оба игрока сидят за одним столом и видят друг друга, а потом говорится, что информацией нельзя меняться. Ну то есть после прочтения всей статьи смысл запрета понятен, а вот в момент решения ограничения выглядят не очень четкими. Возможно, лучше было бы как-то так указать, что каждый видит только стол и карты на нём, и это единственный канал связи.Milfgard Автор
17.01.2019 11:20В посте уточнил, спасибо.
Это как скорость света. Объекты могут двигаться быстрее, но передавать при этом информацию — нет.justK
17.01.2019 12:17Я тоже подумал так же, как и Aracon, причём до описания способов обмена информацией (полагаю, в паре мы бы быстро скооперировались).
После этих уточнений в статье возник вопрос:
Но нельзя меняться информацией между собой и показывать карту до момента, пока она не будет положена на стол. То есть нельзя говорить, стучать по столу, подмигивать и так далее — ничего нельзя.
А взять ту карту, которую я планирую выложить следующей, в руку, но не выкладывать на стол (и не показывать оппоненту), а меееедленно приближать к нему пропорционально ожидаемому времени выкладки? т.е., от карт в руке до карт на столе 30 см, моё число на 15 больше последнего выложенного, потому двигать карту к столу примерно по 2см/сек?
А с уверенным видом положить карту с числом 99 на стол рядом с собой (рубашкой вверх, конечно) и оперировать оставшимися двумя, чтобы показать, что я уверен, что это число ну уж очень большое и будет последним?Milfgard Автор
17.01.2019 12:36Показывать карты нельзя. Двигать карту медленно — думаю, на упрощённых правилах конкретно The Mind можно, на турнире — нет.
dimm_ddr
17.01.2019 16:34По этой игре еще и турниры есть? Как это вообще работает в данном случае?
Milfgard Автор
17.01.2019 17:02Принято строгий вариант правил называть турнирным. Но турниры возможны, условно, за каждую удачно выложенную карту очко. Каждый с каждым, дальше подсчёт очков.
Milfgard Автор
17.01.2019 18:56Кстати, «Квантовый вор» — прекрасная книга, где на первых страницах описан турнир по дилемме заключённого. И ещё много отличных вещей.
Druu
17.01.2019 15:54А чем, с-но, отсчет секунд и т.п. вещи отличается от постукивания по столу? Если можно первое, то можно и все остальное — вплоть до явного озвучивания чисел на руках.
Sirion
17.01.2019 16:02+1В статье указана стратегия, при которой игроки вообще не передают друг другу информацию. Просто закрывают глаза, абстрагируются от всех внешних раздражителей, затем кладут карты на стол в заранее известные моменты времени. Где здесь передача информации?
Druu
17.01.2019 17:46Где здесь передача информации?
Они передают друг другу информацию при помощи задержек. Чем это отличается от того, чтобы просто озвучить карту?
Sirion
17.01.2019 19:36+1Как они могут передавать друг другу информацию, если в данной стратегии они не принимают информацию? Их действия уже определены в момент t = 0, и они никак не меняются от дальнейших действий партнёра.
2PAE
18.01.2019 07:51-1Не деяние, тоже деяние.
Отказ от принятия информации сигнализирует партнеру, какая стратегия выбрана.
Демонстративное закрывание глаз достаточно информативно.
Вам надо развести игроков в разные комнаты и сделать невозможным передачу информации априори.
Что собственно так же говорит о том, какую стратегию выбрать.
Но люди не рациональны ;)
Druu
18.01.2019 08:04-1Как они могут передавать друг другу информацию, если в данной стратегии они не принимают информацию?
Как это не принимают? Они же видят задержку, с-но принимают. Вот если построить процесс так, чтобы игроки не знали с какой задержкой выкладывает карту партнер — тогда информация бы передавалась.
А так — ну проще сказать цифру на карте и не париться.Sirion
18.01.2019 08:17Давайте формализуем.
1. Игрок получает карты и смотрит их. На картах числа x, y, z.
2. В голове игрока стремительно проносятся те же рассуждения, что и в посте.
3. Игрок решает, что через x секунд он выложит карту с числом х, через y секунд он выложит карту с числом y, через z секунд он выложит карту с числом z.
4. После того, как он это решил, это решение не подлежит пересмотру независимо ни от каких действий второго игрока. Второй игрок может закрывать или не закрывать глаза (привет, 2PAE). Может танцевать ламбаду. Может орать первому игроку в ухо номера своих карт. Между любыми событиями, происходящими в мире с момента из пункта 3, и стратегией первого игрока не существует каузальной связи. (Исключая, конечно, события, которые физически помешают игроку воплотить в жизнь данную стратегию. Например, если второй игрок отгрызёт ему руки.)Cerberuser
18.01.2019 09:02Кстати, спасибо за замечательный пример очевидно нерационального поведения. Как я уже упомянул ниже, получилась шикарная модель, которую я, вполне возможно, нагло скопирую для своих писательских целей (с указанием источника, разумеется), и приятно видеть её развитие прямо в обсуждении :)
Sirion
18.01.2019 09:29Указание источника не требуется. А в чём, собственно, нерациональность?
Cerberuser
18.01.2019 09:30+1Я про «отгрызёт ему руки». В некоторых ситуациях это может оказаться моделью, которая совсем ненамного преувеличивает реальность (обычно вымышленную, но всё же). Прошу прощения, если прозвучало так, как будто это относится к Вам.
2PAE
18.01.2019 12:27«Давайте формализуем.» А давайте! :)
Человек узнает какая будет игра.
Человек соглашается стать игроком.
Согласие стать игроком является сигналом другому игроку, что будет применена именно эта стратегия.
Информация передана до наступления момента t = 0.
И да, если вы выводите из игры второго игрока, то вы играете в другую игру.
Это я ещё не затронул пласт вариантов о нерациональности человека.Sirion
18.01.2019 13:11Доводить до абсурда легко)
Давайте так: на расстоянии во сотню световых лет находятся две человеческих колонии. Тысячу лет назад их патриархи договорились о том, что в назначенный час их потомки сыграют в игру. И вот час настал. Ровно 50 лет назад генератор случайных чисел, находящийся ровно посередине между этими планетами, послал два сигнала. В сторону одной из планет полетели три числа, закодированные электромагнитными импульсами. В сторону другой — другие три числа. И вот наконец эти сигналы достигли своих целей. Два человека, которые никогда не видели друг друга и никогда друг друга не увидят, делают свои ходы. Лишь через сто лет сигнал от одной планеты долетит до другой. С величайшей точностью рассчитав время отправки этих сигналов и сравнив его с хронометражем ходов своего соотечественника, учёные узнают, была партия успешной или неуспешной. Сами игроки до этого момента, скорее всего, не доживут.
Итого: играют два человека, которые не могли обменяться информацией просто по законам физики. И стратегия работает.
ads83
19.01.2019 21:58Живой пример того, что не все мыслят одинаково и абсолютно рациональную стратегию нужно дополнять тактикой на конкретного человека.
Даже два примера: 2PAE и Druu ;-)Sirion
19.01.2019 22:06Человек, из условия, незнакомый, к нему индивидуальную тактику заранее не подберёшь. И в принципе нельзя подобрать тактику к 100% оппонентов — всегда найдётся тот, кто первым ходом выложит самую большую свою карту, и привет.
А у вышеупомянутых товарищей вроде были претензии к условию, а не альтернативные решения.
a_e_tsvetkov
17.01.2019 11:54+3Читал в одной книге такую версию этой игры: два отряда парашютистов высаживаются в незнакомой местности и им нужно встретится. У них есть карта, но заранее договориться о месте встречи они не могут.
Книга была времен холодной войны от каких-то экспертов по угражанию ядерным холокостом.mapron
17.01.2019 15:58Я слышал вариацию этой задачи на собеседовании: на числовую прямую в 2 точки на ней высадились 2 парашютиста (и возможно не одновременно). Они заранее могли договориться о стратегии, но они не знают, кто из них правее/левее.
Я ничего умнее «после высадки ходить вправо-влево с увеличением амплитуды» не придумал, но видимо это далеко не оптимальное решение, т.к. оба могут синхронно совершать одни и те же движения параллельно и не встретиться.
Т.к. собеседование я провалил, правильного ответа я не знаю)Sirion
17.01.2019 16:06+1Постоянно бросать монетку и идти куда она скажет. Если я правильно помню слупы, при времени, стремящемся к бесконечности, они встретятся с вероятностью 1.
mapron
17.01.2019 17:16Ну сомневаюсь что это «эффективный алгоритм»)
lgorSL
17.01.2019 23:25Мне сформулировали задачу как "время бесконечное", а поскольку я знал не только программирование, но и физику со случайным блужданием частиц, то предложил очевидный и формально подходящий ответ с блужданием. Но он собеседующую почему-то не устроил.
Я вообще не понял, какой смысл давать эту задачу, если откидывать все "нестандартные" ответы? Что я вынес от решения этой задачи или оттого что узнал ответ — да ничего, единственная польза в том, что на другом собеседовании смогу ответить на такой же вопрос.
Sirion
17.01.2019 23:36А, так нужен эффективный алгоритм? Это надо уточнять в условии =)
Наверное, самое эффективное — если один стоит, а другой шарится туда-сюда на расстояния, соответствующие членам какой-нибудь экспоненциально возрастающей последовательности. Какой именно — зависит от распределения случайной величины, задающей расстояние между парашютистами.mapron
18.01.2019 00:08К сожалению, что конкретно ждали собеседующие, я уже не знаю, но по поводу «эффективности» догадка скорее, из-за специфики других заданий.
По поводу «один стоит» — забыл упомянуть требование, что стратегия должна быть одинаковой для обоих парашютистов.Sirion
18.01.2019 00:39Хм. Тогда стратегия обязана быть стохастичной, иначе в случае одновременной высадки парашютисты будут ходить синхронно, как в балете «Лебединое озеро», и никогда не встретятся.
Тогда бы я предложил, скажем, случайные блуждания по степеням тройки. Кинул монетку, прошёл шаг в выбранном направлении. Снова кинул, прошёл три шага. Потом девять, и так далее. Степени тройки — потому что как только будет достигнуто количество шагов, превышающее расстояние между парашютистами, одной удачной пары бросков монеток будет достаточно, чтобы они встретились, независимо от того, сколько неудачных пар бросков было ранее.
a_e_tsvetkov
18.01.2019 06:37Если нельзя заранее договорится встретится в точке 0, то ваше решение выглядит почти правильным. Правильно будет: один стоит, а другой ходит.
SmallRussia
17.01.2019 12:25Можно класть карты под определённым углом:
у нас есть 180 градусов на 100 чисел, можно расположить примерно,
Хотя бы можно класть параллельно/ортогонально (чётное/нечетное)Milfgard Автор
17.01.2019 12:37Непонятно, как вы систему отсчёта донесёте до второго игрока. И как первую выложите.
SmallRussia
17.01.2019 12:42-1Ну если не нравятся градусы, можно закрывать соответствующую часть площади карты следующей по величине
Milfgard Автор
17.01.2019 12:43+1А как другой игрок об этом догадается?
SmallRussia
17.01.2019 12:46Ну если не площадь, то хотя бы ширину, тут уж легче догадаться
А так то, может он вообще ни о чём не догадается, даже если прямо сказать)Sirion
17.01.2019 12:48Вы бы на месте второго игрока догадались?
SmallRussia
17.01.2019 12:49Ну мы же мыслим так, якобы что он мыслит также)
Sirion
17.01.2019 12:56Это вы мыслите так. Я, например, если бы вы выложили карту со сдвигом в миллиметр, совершенно не факт, что вообще обратил бы на это внимание.
Напротив сидит землянин, а не ваша копия.SmallRussia
17.01.2019 12:58Ну уж треугольник из карт я бы заметил) Ниже описал
Sirion
17.01.2019 12:59Пожалуйста, выложите треугольник с соотношением сторон 1:2:5.
SmallRussia
17.01.2019 13:16Тут нужна комплексная стратегия, при таком раскладе первый игрок скорее всего обладает наименьшей и наибольшей картой
Sirion
17.01.2019 13:31Так, давайте прекратим войну правок, иначе читатели вообще ничего не поймут)
Окей, тогда 24:25:50. Вы пытаетесь какими-то странными способами обмануть неравенство треугольника.SmallRussia
17.01.2019 13:52Нет, я бы не строил треугольники, которые невозможно построить, там были бы нетривиальные случаи, как тут карты 24 и 25 нужно кидать подряд.
Но совершенно точно, что своей положенной картой я должен сообщить партнёру размер своей следующей, при это не зная его карту. Первая карта не даёт никакой информации, кроме того, что она наименьшая, так что я пока остановлюсь на покрытии площади карты, ибо говорить, что игрок вдруг не догадается можно при любой стратегии.
Может быть у Вас есть решение?Sirion
17.01.2019 14:1320:30:51
Что такое «нетривиальные случаи»? Где-то 47.7% из случайно взятых троек карточек не удовлетворяют неравенству треугольника.
Для протокола, я вообще считаю, что вы решаете не ту задачу. Я просто обратил внимание на то, что вы даже её решаете неправильно)SmallRussia
17.01.2019 14:40Но у нас вообще-то 6 карт. вы 6 чисел назовёте, из которых нельзя хотя бы один треугольник построить?
SmallRussia
17.01.2019 14:421, 2, 4, 7, 12, 20 ну да, но хрен оба игрока с такими входными выиграют… Будем строить 6-ти угольники =D Но и тут фигня, поэтому я не понимаю, почему площадь очень сложно, а длины норм, но не всегда построишь
Sirion
17.01.2019 15:06Ну, игрок-то знает только свои три карточки. Так что треугольники.
Шестиугольник тоже не всегда можно) 1, 2, 3, 4, 5, 16.SmallRussia
17.01.2019 15:31А что если:
Мы можем положить свою карту сверху/снизу/справа/слева от его и умножить на расположение нашей карты вдоль/поперёк, — уже 8 вариантов, можно дальше углы вводить, как я уже писал. А если можно трогать уже положенные карты, то кодирование упрощается.Sirion
17.01.2019 15:37Ну, во-первых, у меня почему-то получается 8. Четыре варианта смещения, два варианта поворота. 32, если допустить смещение по диагонали и считать, что поворотов четыре варианта. 64, если допустить повороты по диагонали. Маловато всё равно.
Во-вторых, допустим, вы играете со мной. Я выложил карту чуть слева от вашей и повернул её набок. Угадаете, какое число я имел в виду?)SmallRussia
17.01.2019 16:04Можно ещё добавить касание/некасание карты напарника, — 128-ми будет вполне достаточно
SmallRussia
17.01.2019 16:11у вас тоже ошибка, вы уже посчитали повороты по диагонали когда получили 32
Sirion
17.01.2019 16:24у вас тоже ошибка, вы уже посчитали повороты по диагонали когда получили 32
Ничего подобного. Когда получил 32, я посчитал повороты на 180 и 270 градусов.
кроме того 64 вполне достаточно, ведь свои то карты вы знаете.
У вас карты 2, 80, 90. У противника — 1, 79, 89. Противник выложил единицу, вы выкладываете двойку. Как вы сообщите ему числом от 1 до 64, что у вас именно 80, и он должен выложить 79 раньше?
И более интересный вопрос: допустим, вы сообщили партнёру информацию о своей следующей карте. А у него карта больше, и следующий ход должны делать вы. Как он сообщит об этом вам?
SmallRussia
17.01.2019 16:278 вариантов расположения карты умножить на 4 разных поворота, посчитайте
Я ему говорю у меня 79 или 80, тут то он и призадумается, конечно))
карта симметричная, повернув на 180 будет слабо отличатьсяSirion
17.01.2019 16:33Каким образом вы это ему говорите, если 64 варианта?
В общем, у меня нет времени продолжать этот разговор. Резюмирую: у вас три метаошибки.
Первая: вы решаете не ту задачу (в условии чётко сказано, что никакой дополнительной информации способом выкладывания карт не передаётся).
Вторая: вы решаете её неочевидными способами, которые правильно интерпретирует разве что ваш клон, да и то не точно.
Третья: даже эти решения вы не продумываете до конца.
Засим откланяюсь.
SmallRussia
17.01.2019 12:48Во, я придумал решение, которое мне нравится, однако Вы его снова забракуете:
Сложить карты с пустым треугольником в центре с отношением сторон соответствующим, где например 100 — это целая длина карты
savostin
17.01.2019 12:53А разве все это, включая предложенный в статье метод секунд, не является «меняться информацией между собой»?
Milfgard Автор
17.01.2019 13:21+1Вы закрываете глаза и начинаете выкладывать карты по времени. Условно. Вам не нужны внешние реакции для этого.
zagayevskiy
17.01.2019 14:10+1Надо усложнить, и дать на всё про всё минуту) Не успели выложить за минуту — проиграли.
Cerberuser
17.01.2019 14:36Сделаем таймер не на секунду, а на полсекунды — 100 карт выложить успеем.
zagayevskiy
17.01.2019 15:01Кажется, что отсчитывать про себя полсекунды сильно сложнее.
Gibboustooth
17.01.2019 19:56+1Музыканты как-то справляются.
Milfgard Автор
17.01.2019 20:03Ха, музыка вообще как синхронизатор в рабочих процессах исторически использовалась. Например, про дубинушку ухнем — это точка максимального приложения силы командой бурлаков. Ну и на гребной лодке у викингов был свой музыкант а капелла обязательно для синхронизации, у греков — ударник и так далее.
cyberly
17.01.2019 21:29+1Ну, это период мигания двоеточия на электронных часах. Или время между «тик» и «так» в некоторых механических. Так что может быть даже привычнее.
Cerberuser
17.01.2019 14:39+1После разговора про рациональные действия успел подумать, что из этого может выйти неплохая модель для куда более распространённого случая нерациональных действий. Приятно было увидеть соответствующую идею буквально в следующем абзаце :)
slonm
17.01.2019 16:11>А прикол в том, что рациональные люди при одних и тех же исходных данных не нуждаются в диалоге, чтобы договориться. Они могут точно предсказать действия друг друга.
Первое что пришло в голову это некое кодирование порядком карт на руках и Little endian vs Big endian проблема записи байт в данных во вполне рациональных спецификациях.
Yggaz
17.01.2019 16:3292. Нет, ну как, как именно надо думать, чтобы, целясь на ПОЛОВИНУ среднего, сказать «92»?
Наверное, это очень креативный человек :).dimm_ddr
17.01.2019 16:38+1Нужно всего лишь играть не на свою победу, а на поражение/усложнение игры для других игроков. Это отдельный кайф — сломать всем стратегию которую они придумали, даже если сам при этом проиграешь.
Yggaz
18.01.2019 06:58«Всего лишь», ага. Я и говорю — очень креативный человек должен быть :).
dimm_ddr
18.01.2019 12:26+1Ну не знаю, я практически в каждой компании в которой мы собирались на настолки такого человека встречал, по моему опыту очень распространенное явление. Да я и сам так иногда делаю. Особенно когда играем не первый раз и я только что выигрывал — выигрывать каждый раз неинтересно и уменьшает удовольствие остальных игроков, поэтому я иногда играю чтобы усложнить игру остальным даже если сам при этом не выиграю почти точно. Но это, конечно, только мой опыт, возможно мне просто так везло.
Rikkitik
18.01.2019 13:15Есть ещё люди, которые в игре ставят альтернативные цели, например, играя за вора в «Манчкине» не пытаются набрать победные 10 уровней, а воруют у других игроков шмот, который используют исключительно как плату за дальнейшее воровство (цель — украсть всё у всех).
Sirion
18.01.2019 13:27Вот только играть таким альтернативным игрокам потом приходится исключительно друг с другом)
dimm_ddr
18.01.2019 15:11Ну не знаю, опять же из моего опыта это только добавляло интереса. Во-первых нет однозначных фаворитов с которыми неинтересно играть, во-вторых, это добавляет игре жизнености что ли, игроки не пытаются просчитывать всю игру, а начинают играть и наслаждаться. Не то чтобы они раньше такого не делали, но здесь это располагает. Ну и тем, кто не любит считать проще играть становится. У нас от такого подхода одни плюсы были, никто ни разу не жаловался.
Sirion
18.01.2019 15:15Значит, у вас и было «друг с другом». Некоторым детям интересно поиграть с игрушечным самосвалом, некоторым — с его деталями. А вот первым детям со вторыми играть совершенно неинтересно. Мягко говоря.
Cerberuser
18.01.2019 15:54Загвоздка в том, что Ваши слова легко воспринять так, как будто «таких альтернативных» — меньшинство, и найти компанию — проблема. Не скажу, что опыт показывает строго обратное, но и с такой трактовкой, если бы она прозвучала явно, точно бы не согласился.
Sirion
18.01.2019 16:16Компания компании рознь. Абстрактных людей найти можно. А вот когда друзья не зовут тебя в гости, потому что хотят спокойно поиграть в настолки, а прошлую игру ты им испортил — это уже достаточно неприятно.
Am0ralist
18.01.2019 16:48Эм, а зачем её портить? И как, если играть по правилам?
Более того, ты ещё и не победил…
Вот когда друзья во время игры все твои рац.доводы, что у тебя ещё 6 уровень и ты не несёшь такой угрозы, как клирик 8-го — не понимают и тебя пытаются утопить (при том, что ты в их компании хорошо если один разок из десятка выиграл) — вот тут вопрос, кто ещё портит игру)Sirion
18.01.2019 16:51Ну, например, ниже уже упомянули кингмейкинг.
Когда я понял, что в эту партию манчкина мне никак не выиграть, и решил ради интереса все усилия сосредоточить на том, чтобы выиграл определённый другой игрок, дошло чуть ли не до скандала)Am0ralist
18.01.2019 16:58Так когда в той партии единственным кто мне помогал оказался именно тот клирик и после чего она, естественно, выиграла — то я всё равно оказался виноват)
Я, видите ли, должен был сдаваться и проигрывать монстрам, а не звать на помощь и делиться сокровищами.
Понимаете, если люди сами себя ведут не рационально, то докопаться они смогут и до столба.Gryphon88
18.01.2019 23:31«Монополия» является значимой причиной семейного насилия в США, но это не повод её запрещать. Так и тут: люди слишком серьёзно воспринимают игру, возможно, её стоит сменить на более несерьёзную, типа «Челюстей», и надеяться, что серьёзность не относится к любому образу взаимодействий.
Rikkitik
18.01.2019 17:50А почему вы думаете, что человек, допускающий возможность нестандартного подхода к игре, всегда одной и той же «альтернативной» стратегии придерживается? Мне это наоборот кажется крайне маловероятным (и никогда не встречалось, если честно). Может, у него клирик и «божественное вмешательство» в рукаве с первого хода припасены, а игроки только успели обрадоваться, что тролль перестал грабить и всех топить…
Sirion
18.01.2019 18:18А почему вы думаете, что я так думаю?
«Нестандартный подход» такого типа ломает баланс. Человек получает удовольствие за счёт того, что лишает удовольствия других, которым этот баланс был важен. Помнится, я в детстве придумал хитрый план: звал маму играть в шашки, а сам играл в поддавки. И, что характерно, всегда выигрывал. До тех пор, пока мама со мной играть не перестала.dimm_ddr
18.01.2019 18:47+1«Нестандартный подход» такого типа ломает баланс.
Если баланс можно сломать просто нестандартным подходом, то не такой уж он и хороший там был.
Человек получает удовольствие за счёт того, что лишает удовольствия других, которым этот баланс был важен.
Совсем необязательно. Ты не лишаешь удовольствия других, ты просто находишь удовольствие не в выигрыше, а в отыгрыше. При этом даже добавляя удовольствие сразу для нескольких типов игроков: для тех кто играет не очень, так как мешаешь профи просчитывать все что можно и для собственно профи, потому что им становится интереснее играть. Когда играет компания друзей, а не профессиональные игроки на турнире, то уровень игры у всех почти наверняка разный, а значит если все будут играть исключительно на победу и в игре не правит рандом, то в 9 из 10 случаев будут побеждать одни и те же один-два человека. Какой в этом кайф вообще для всех? Победители итак знают что они сильнее, им неинтересно, слабые игроки итак знают что шансов у них нет а значит и трепыхаться не имеет смысла. А вот игрок с отыгрышем мешает победителям и помогает слабым игрокам тем самым несколько уравнивая шансы. А заодно и показывает слабым игрокам как можно получать удовольствие от игры независимо от победы.Sirion
18.01.2019 20:27Баланс игр, в которых участвуют более двух игроков и в которых игроки могут более-менее активно взаимодействовать, по определению хрупок. Скажем, если два игрока объединятся, они легко победят третьего. Если игрок действует не рационально, это может подарить лёгкую победу одному из оставшихся игроков. Те, кто из-за этого проиграл, не будет доволен. Тот, кто выиграл, тоже. Тут я, разумеется, говорю об игроках своего склада, которым интересно соревнование и победа.
Возможно, подобное поведение подарит приятные минуты новичкам и другим любителям поставить альтернативные цели. Профи, которым бы от этого стало интереснее играть, я в жизни не встречал. Наоборот, все хорошие игроки, которых я знаю, от такого поведения ссали кипятком. Потому что оно превращает ту игру, которую они любят, в какую-то другую, в которую они играть не собирались.
Короче говоря, не надо лезть в чужой монастырь со своим уставом. Любителю отыгрыша нечего делать в партии манчкинов. Хардкорному игроку не стоит лезть к новичкам. Взрослому шахматисту, которому интересно играть в шахматы по правилам, не стоит садиться за доску с ребёнком, которому интереснее менять правила каждый ход.
donRumatta
18.01.2019 21:39Например, в Игре Престолов нет ничего хуже Грейджоя пассивно отыгрывающего «свою игру». Не нужно растить такую смену(=
donRumatta
18.01.2019 14:49По-моему, такое поведение все-таки из той же оперы, что и кингмейкинг и подобные «криминалити»: невозможно просчитать игру, когда игрок играет не на победу, а ради вымышленных ачивок.
Am0ralist
18.01.2019 13:24Я просто предпочитаю творить на столе феерию)
Например, а проекте манхэттен забабахать войнушку, хотя это очень не рациональный ход)
Или в замесе провернуть красивую комбинацию в ущерб очкам иногда.
В манчкине там вообще сам бог велел творить фигню)
Ибо фан есть и от игры и внезапности действий, а не только точно выверенной машинной стратегии.
Девиз «Несём фигню в массы!» одного фантаста зачастую придерживается и Мосигра, такое ощущение.
Чего стоит «скидка -25%» на черную пятницу (черт, надо было тогда скринить! фееричное описание скидки)
SmallRussia
17.01.2019 16:48-1Можно класть карту по отношению к уже положенной сообщая своё следующее число (точнее диапазон):
Сверху/снизу, по бокам/по диагонали, а также крутить её \ / l _, плюс касание/некасание предыдущей карты и это даёт нам 8*4*2=64 варианта,
а нам вполне достаточно и 50-ти диапазонов по два значения
Главное не запороть первый ход)
DoctorX
17.01.2019 18:45При стратегии выкладывания карт задержками всё ещё остаётся вопрос выкладывания первой карты. Получается что нужно договориться о точке синхронизации без передачи информации. А это уже задача о двух генералах которая решения не имеет.
Milfgard Автор
17.01.2019 18:54Первая уже выложена, это ноль. Вопрос только в том, успеет ли человек обдумать стратегию и включиться в игру с первой секунды. С учётом, что он сегодня уже несколько раз играл — вероятность ненулевая.
hddn
17.01.2019 21:33Такие игры подошли бы для сериала «Игра Лжецов». Интересно было бы сделать обзор на игры оттуда, кстати.
Rikkitik
17.01.2019 22:35+1нужно по очереди досчитать до ста (это примерно половина от участников). Каждый может кричать только одно число один раз. Если сбились или выкрикнули одновременно два голоса — надо начинать с самого начала. Потом выключить фонарь, крикнуть «один» и пойти выяснять, что происходит. Обычно питание удаётся восстановить куда раньше, чем игроки досчитают.
Меня бы у вас сразу забанили как зануду, что портит всем удовольствие. Примерно полторы секунды потребовалось, чтобы найти решение: взяться всем за руки змейкой и просто называть числа по порядку. Второе решение ещё проще: включить телефон в режиме фонарика и передавать кому-то как эстафетную палочку, говорит только тот, кто с фонариком, остальные молчат.Milfgard Автор
17.01.2019 22:44Пока вы договоритесь на 200 человек, среди которых ещё человек 10 со своими светлыми идеями, аниматор как раз успеет найти электрика. Но способ про змейку отличный, я ещё это решение не видел. Думаю, убедить всех будет просто.
Wesha
18.01.2019 00:50+1Сразу видно программиста и его мутекс. Кстати, включать телефон в режим фонарика необязательно. И вообще это может быть любой предмет. Получил — сказал следующее число — передал другому.
Cerberuser
18.01.2019 07:04Фонарик, я так понимаю, только для того, чтобы при беглом взгляде было сразу видно, где «эстафетная палочка» прямо сейчас.
Rikkitik
18.01.2019 07:23+11. Я не программист. Свободу мьютексам! Но так-как в роду много железнодорожников, можете считать склонность к жезловой системе наследственной.
2. Какие ещё хорошо видимые издалека в полной темноте предметы у вас обычно с собой?
3. У тех, кто молчит, должна быть вовлечённость в процесс, как вариант — держаться за руки или следить за перемещением светового пятна по залу.
exehoo
18.01.2019 10:17"— Да это как разговаривать преферансом!
— Не, — сказал Ахиллес, — Преферансом — начальный уровень разговорного андромедянского.
— Вистовать на шестерной при детях и скрудлях недопустимо, — заметила Черепаха."Cerberuser
18.01.2019 13:57А как же «сталинград»?!
Wesha
18.01.2019 23:33Вот сейчас Гитлер обиделся :)
Cerberuser
19.01.2019 08:21Штирлиц, Мюллер и Гитлер играют в преферанс.
Штирлиц: Сталинград!
Гитлер (хватается за голову): Как? Опять?!
ThunderCat
18.01.2019 17:54Если «невыкладывание карты» аналог «пас» стратегия элементарна — пасуем до первой карты начиная с 1, считая пасы дальше выкладываем следующую и тд.
merkius
19.01.2019 07:00В текущем варианте условия нет ничего о том, что игроки не могут посмотреть другие карты из колоды. И нет ничего сильно запрещающего в процессе взятия карт. Тогда решение вполне очевидное, особенно учитывая
И он с большой вероятностью уже пробовал играть в эту игру с другими людьми сегодня.
Первый игрок может взять 3 карты и посмотреть оставшиеся. Если их 97 — значит он и есть первый, после чего он должен перетасовать колоду вслепую. Таким образом первый игрок не узнает достоверный список карт второго игрока. Второй после этого тоже берет себе 3 карты и смотрит оставшиеся. Т.к. он видит, что их 94, то он знает, что он второй. Ещё он знает, что 3 отсутствующие карты — это те, которые у первого.
Таким образом выполняются все условия: игроки информацией не меняются (т.к. первый на момент взятия карт не получает никакой явной информации от второго, хотя это может быть спорно), карты никому не показываются (игроки сами их смотрят). После этого второй игрок точно знает нужный порядок выкладывания карт.
Теперь этап выкладывания карт на стол: второй игрок на каждый ход, который ему нужно сделать, сразу выкладывает все свои карты, идущие по порядку. Первый игрок после каждой пачки карт второго игрока выкладывает одну свою карту и ждет некоторое время. Второй игрок всегда (даже в самом начале выкладывания) либо выкладывает нужные карты практически сразу (если нужная на этом этапе карта у него), либо не выкладывает до тех пор, пока первый не сделает свой ход (если нужно выкладывать первому игроку). У землян обычно ощущение течения времени в более-менее одинаковых условиях отличается меньше, чем нужно для невозможности различия между ситуациями «выложил нужные карты сразу» от «не выложил нужные карты сразу», поэтому проблем с последовательностью ходов быть не должно.
Альтернативные варианты стратегий, основанные на неточностях ТЗ и «удобных» интерпретациях фраз:
Есть колода из 100 карт с натуральными числами от 1 до 100, каждого по одному.
Если взять колоду, в которой на одной карте натуральные числа от 1 до 100 в порядке возрастания, а на остальных картах натуральные числа вообще отсутствуют, то порядок выкладывания может быть произвольным: числа на картах будут в порядке возрастания в любом случае (если эти числа вообще там будут). Скользкий момент — сравнение пустой карты и карты с числами. Далее будут рассматриваться варианты, когда на каждой карте одно число.
Вы и второй игрок берёте по 3 карты из этой колоды.
Порядок взятия карт однозначно не определен. Если принимается решение с отсчитыванием секунд, то можно аналогичным образом брать колоду, вытаскивать из неё карту, возвращать колоду на место через N секунд, где N — число на взятой карте. Тогда все числа числа на взятых картах будут известны обоим участникам, что приводит к тривиальному выкладыванию карт с целью победы.
Задача — одну за одной выложить их на стол в порядке возрастания.
Если выложить 6 карт одну за одной (т.е. по очереди) в столбик (т.е. одну на одну), то это можно считать порядком возрастания. Высоты столбика.
Еще можно погнуть карты так, чтобы (условно) лежащая на столе карта образовывала горбик. Тогда эти горбики можно выложить «один за одним» (т.е. сначала один, потом второй, потом третий и т.д.) так, чтобы они лежали «в порядке возрастания» высоты горбика, если смотреть с какой-то одной стороны.
Но нельзя меняться информацией между собой и показывать карту до момента, пока она не будет положена на стол.
В самом первом решении уже использовалось то, что под «меняться информацией между собой» не попадает односторонняя коммуникация без подтверждения доставки сообщения.
То, что один игрок не «показал карту» другому игроку не означает, что другой игрок не мог силой забрать карту, посмотреть и отдать обратно (это если рассматривать сильных игроков).
Если в конце игры 6 карт выложены правильно, оба игрока выигрывают.
Используется понятие «конец игры», но из условий выше не следует, что игра заканчивается в момент выкладывания последней карты на стол. На этом можно попробовать сыграть (сделать сортировку карт на столе после выкладывания последней карты, но перед концом игры).
Еще критерий «правильно» основывается, скорее всего, на предложении с фразой «одну за одной», которое не такое уже и однозначное.
В момент, когда первая же карта ложится неправильно — оба игрока проигрывают.
Критерий «неправильности» тоже явным и однозначным образом не определён. Могут быть ситуации «правильно», «неправильно», «а кто его знает, правильно или не правильно»(тут уж как карта ляжет). В таком случае достаточно перевести игровую ситуацию из категории «неправильная» в категорию «а кто его знает», после чего постоянно выкладывать карты с обработкой вида «а кто его знает» и с сортировкой по нужному ключу перед концом игры.
Ваша задача — выиграть в этой игре.
Выиграть может быть невозможно, если задача оппонента — проиграть, и он целенаправленно идёт к этому. Это, кстати, условиям задачи совсем уж явно противоречить не будет.
С вами играет человек
О, это вообще отлично. У человека, если он играет, практически со стопроцентной вероятностью есть пульс. Его можно использовать как более точное средство синхронизации отсчётов вместо вычисления примерного количества прошедших секунд.Milfgard Автор
19.01.2019 07:02«В текущем варианте условия нет ничего о том, что игроки не могут посмотреть другие карты из колоды. И нет ничего сильно запрещающего в процессе взятия карт.»
— есть общая система умолчаний и сокращений, подразумевающая, что это запрещено. Точно так же я не описывал, что карты берутся в начале игры лицом к себе, что они не двусторонние и так далее. А всё остальное прекрасно )
ads83
19.01.2019 22:39+1Видимо, в первый раз я бы проиграл в эту игру.
Я рассуждал именно так, как вы описали в рациональном варианте. Но после построения всей цепочки вдруг подумал ну 100 это же много, партнер устанет ждать и переключится на другую стратегию. В итоге первая секунда у меня предназначалась на первый десяток карт, во вторую выкладывал бы карты с 20 по 29 и т.д.
И только потом, когда прочитал решение, рациональный «я» сказал, что 100 секунд это менее двух минут и усложнять было совсем необязательно.
P.S. Довольно давно читал про задачу о мудрецах и колпаках. Там даже не одна задача, а довольно много. Я читал разборы Мартина Гарднера, там было и про то, как квантовать время, и с большим количеством мудрецов. По-моему, ваша задача — вариация на тему. Довольно интересная, так как в нее просто начать играть — достаточно любой колоды карт и договоренности, как считается масть.
Sirion
Напомнило)
caudatecoder
Починил, а то вдруг кто решит воспользоваться
Sirion
Тьфу ты ж. Классическая ошибка с замыканиями. В первом комменте. Позорище =(
Sirion
Хочу уточнить: меня минусуют за самокритику? о_О
greabock
Это почти как плюсуют… жаль, что Хабру это не объяснить никак )
vedenin1980
Да ладно вам, на Хабре просто не любят переходы на личности и оскорбления и просто не заметили, что комментатор писал самому себе.
mayorovp
Зачем так сложно?
const- и let-переменные новые на каждой итерации цикла, их не нужно как-то дополнительно замыкать.
montylab
Wladgaint
[3, 1, 25, 7].forEach(elem => setTimeout(console.log, elem*100, elem));