БлогNot. Игра Пенни

Игра Пенни

У игроков имеется, допустим, по 50 монет, а ещё 50 лежат в мешочке на столе. Впрочем, подойдут и шашки, которые можно переворачивать, квадратики из бумаги, одна сторона которой не белая и вообще любые предметы, имеющие два состояния, которые можно закодировать нулём и единицей.

Право первого хода любезно уступаем сопернику, он выкладывает любую последовательность из трёх своих монет, например, "орёл" - "решка" - "орёл" или 1 - 0 - 1. Второй игрок отвечает такой же последовательностью из трёх двоичных чисел.

После этого начинаем выкладывать "вслепую" третью последовательность из "ничейных" монет, делая это до тех пор, пока в новой последовательности не встретится цепочка "орлов" и "решек" какого-либо из игроков. Иногда кладут сразу 5 монет и потом при необходимости добавляют ещё по одной, пока не встретится чья-то последовательность. Чья цепочка "орлов" и "решек" встретилась первой, тот выиграл этот ход и забирает три монеты соперника, а монеты из мешочка можно возвращать обратно, не суть дела. Когда у одного из соперников не осталось монет, всё закончилось и все деньги достались победителю.

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

Называется это чудо математческого "мошенничества", приводившее в ярость самого Гарднера, игрой Пенни.

Ниже можно поиграть с компьютером (бесплатно!) и посмотреть исходник в виде файла .html без обрамления заголовочными тегами. Ход состоит в том, что вы отмечаете нужные чекбоксы из трёх и нажимаете кнопку OK :) Все необходимые элементы разметки игра создаёт себе сама в разделе с идентификатором pennyId. Для сброса можно просто обновить страницу клавишей F5.

 <div style="text-align:justify;margin:auto;width:850px;" id="pennyId"></div>
 <script>
  var penny = function (gameId) {
   var check = [];
   var divId = document.getElementById (gameId);
   for (var i=1; i<4; i++) {
    check[i] = document.createElement('input');
    check[i].type = "checkbox";
    check[i].name = "check";
    check[i].value = "1";
    check[i].id = "id"+i;
    divId.appendChild (check[i]);
   }
   var btn = document.createElement('input');
   btn.type = "button";
   btn.value = "OK";
   divId.appendChild (btn);
   var txt = document.createElement('p');
   divId.appendChild (txt);
   var step = 1;
   var cnt = [ 0, 0 ];
   var b3arr = [ 4,4,1,1,6,6,3,3 ]; //самая главная стратегия :)

   btn.addEventListener ("click", function(e) { //клик по кнопке
    var a3 = (check[1].checked<<2) | (check[2].checked<<1) | (check[3].checked);
    var b3 = b3arr[a3].toString(2);
    var human = (check[1].checked|0)+','+(check[2].checked|0)+','+(check[3].checked|0);
    var comp = ((b3&4)>>2)+','+((b3&2)>>1)+','+(b3&1);
    var rands = rnds(5); //сначала 5 бросаний
    var res;
    while (1) {
     var humanIndex = rands.indexOf (human);
     var compIndex = rands.indexOf (comp);
     if (humanIndex > -1 && (humanIndex < compIndex || compIndex == -1)) { 
      res = 'вы выиграли'; cnt[0]++; break; 
     }
     if (compIndex > -1 && (compIndex < humanIndex || humanIndex == -1)) { 
      res = 'я выиграл'; cnt[1]++; break; 
     }
     rands += ',' + Math.round(Math.random());
    }
    txt.innerHTML = 'Шаг '+(step++)+', ваш ход: '+ human +', мой ход: '+ comp +', числа: '+ rands +
     ', <b>'+res+'</b>, счёт &#128526;'+cnt[0]+' : '+cnt[1]+'&#128187;'+'<br>' + txt.innerHTML;

    function rnds(n) { //строка из n случайных 0 и 1
     var a = [];
     for (var i=0; i<n; i++) a[i]=Math.round(Math.random());
     return a.join(',');
    }
   });
  }

  window.addEventListener('load', function (e) {
   penny ("pennyId");
  });  
 </script>
 <noscript>
  <p style="text-align: center;">Нужен включённый в браузере Javascript для работы приложения!</p>
 </noscript>

06.11.2019, 01:11 [2036 просмотров]


теги: игра javascript random числа деньги математика мошенничество

К этой статье пока нет комментариев, Ваш будет первым