Что не так в моем коде в Mathematica - PullRequest
2 голосов
/ 08 октября 2019

Предположим, что вы играете в вариант игры в покер с пятью картами, использующими подмножество одной обычной колоды карт. Рассматриваемое подмножество - это карты с оценкой 7, 8, 9,10, J, Q, K, A из одной колоды, всего 32 карты. Разрешите A-7-8-9-10 как низкий прямой или прямой поток. Рассчитайте точную вероятность следующих раздач, используя метод переписи.

  • одна пара
  • две пары
  • три вида
  • прямо
  • фулл-хаус
  • флеш
  • четыре вида
  • стрит-флеш
  • ничего

Сравнить иобсудите вероятности описанного выше варианта игры в покер с вероятностями для обычной игры в покер со стандартной колодой из 52 карт. Примечание: если в данной руке есть раздающиеся руки, считается только одна (наивысший ранг)

. Мое решение было таким:

Any hand

In[172]:= 

In[263]:= deck = Range[7, 13]

Out[263]= {7, 8, 9, 10, 11, 12, 13}

Subsets[{7, 8, 9, 10, A, J, Q, K}, {5}]


Out[41]= {{7, 8, 9, 10, A}, {7, 8, 9, 10, J}, {7, 8, 9, 10, Q}, {7, 8, 9, 10, K}, {7, 
  8, 9, A, J}, {7, 8, 9, A, Q}, {7, 8, 9, A, K}, {7, 8, 9, J, Q}, {7, 8, 9, J,
   K}, {7, 8, 9, Q, K}, {7, 8, 10, A, J}, {7, 8, 10, A, Q}, {7, 8, 10, A, 
  K}, {7, 8, 10, J, Q}, {7, 8, 10, J, K}, {7, 8, 10, Q, K}, {7, 8, A, J, 
  Q}, {7, 8, A, J, K}, {7, 8, A, Q, K}, {7, 8, J, Q, K}, {7, 9, 10, A, J}, {7,
   9, 10, A, Q}, {7, 9, 10, A, K}, {7, 9, 10, J, Q}, {7, 9, 10, J, K}, {7, 9, 
  10, Q, K}, {7, 9, A, J, Q}, {7, 9, A, J, K}, {7, 9, A, Q, K}, {7, 9, J, Q, 
  K}, {7, 10, A, J, Q}, {7, 10, A, J, K}, {7, 10, A, Q, K}, {7, 10, J, Q, 
  K}, {7, A, J, Q, K}, {8, 9, 10, A, J}, {8, 9, 10, A, Q}, {8, 9, 10, A, 
  K}, {8, 9, 10, J, Q}, {8, 9, 10, J, K}, {8, 9, 10, Q, K}, {8, 9, A, J, 
  Q}, {8, 9, A, J, K}, {8, 9, A, Q, K}, {8, 9, J, Q, K}, {8, 10, A, J, Q}, {8,
   10, A, J, K}, {8, 10, A, Q, K}, {8, 10, J, Q, K}, {8, A, J, Q, K}, {9, 10, 
  A, J, Q}, {9, 10, A, J, K}, {9, 10, A, Q, K}, {9, 10, J, Q, K}, {9, A, J, Q,
   K}, {10, A, J, Q, K}}

Length[Subsets[{7, 8, 9, 10, A, J, Q, K}, {5}]]



In[259]:= Subsets[{A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K}, {5}]


In[260]:= Length[Subsets[{A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K}, {5}]]

Out[260]= 1287

One pair:

32kort:

In[135]:= deck = Sort[Join[Range[7, 14], Range[7, 14], Range[7, 14], Range[7, 14]]];
hands = Subsets[deck, {5}];
onePairQ32[{___, x_, x_, ___}] := True;
onePairQ32[{___, x_, x_, x_, ___}] := False;
onePairQ32[{___, x_, x_, ___, y_, y_, ___} /; x != y] := False;
onePairQ32[{___}] := False;
Count[hands, _?onePairQ32]

Out[141]= 107520

52kort:



In[128]:= 
deck = Sort[Join[Range[1, 13], Range[1, 13], Range[1, 13], Range[1, 13]]];
hands = Subsets[deck, {5}];
onePairQ52[{___, x_, x_, ___}] := True;
onePairQ52[{___, x_, x_, x_, ___}] := False;
onePairQ52[{___, x_, x_, ___, y_, y_, ___} /; x != y] := False;
onePairQ52[{___}] := False;
Count[hands, _?onePairQ52]

Out[134]= 1098240



Two pairs:

32kort:

In[8]:= deck = Sort[Join[Range[7, 14], Range[7, 14], Range[7, 14], Range[7, 14]]];
hands = Subsets[deck, {5}];
TwoPairQ32[{___, x_, x_, ___}] := False;
TwoPairQ32[{___, x_, x_, x_, ___}] := False;
TwoPairQ32[{___, x_, x_, ___, y_, y_, ___} /; x != y] := True;
TwoPairQ32[{___}] := False;
Count[hands, _?TwoPairQ32]

Out[14]= 24192




52kort:

In[15]:= deck = Sort[Join[Range[1, 13], Range[1, 13], Range[1, 13], Range[1, 13]]];
hands = Subsets[deck, {5}];
TwoPairQ52[{___, x_, x_, ___}] := False;
TwoPairQ52[{___, x_, x_, x_, ___}] := False;
TwoPairQ52[{___, x_, x_, ___, y_, y_, ___} /; x != y] := True;
TwoPairQ52[{___}] := False;
Count[hands, _?TwoPairQ52]

Out[21]= 123552



Three of a kind:

32kort:

In[22]:= deck = Sort[Join[Range[7, 14], Range[7, 14], Range[7, 14], Range[7, 14]]];
hands = Subsets[deck, {5}];
ThreeOfKindQ32[{___, x_, x_, ___}] := False;
ThreeOfKindQ32[{___, x_, x_, x_, ___}] := True;
ThreeOfKindQ32[{___, x_, x_, ___, y_, y_, ___} /; x != y] := False;
ThreeOfKindQ32[{___}] := False;
Count[hands, _?ThreeOfKindQ32]

Out[28]= 12320

52kort:



In[142]:= deck = Sort[Join[Range[1, 13], Range[1, 13], Range[1, 13], Range[1, 13]]];
hands = Subsets[deck, {5}];
ThreeOfKindQ52[{___, x_, x_, ___}] := False;
ThreeOfKindQ52[{___, x_, x_, x_, ___}] := True;
ThreeOfKindQ52[{___, x_, x_, ___, y_, y_, ___} /; x != y] := False;
ThreeOfKindQ52[{___}] := False;
Count[hands, _?ThreeOfKindQ52]

Out[148]= 59280

pairQ[{x_, x_, y_, y_} /; x != y] := False; (* two pairs *)
pairQ[{___, x_, x_, x_, ___}] := False; (* three of a kind *)
pairQ[{___, x_, x_, ___}] := True; (* a pair *)
pairQ[{___}] := False (* else *)



Four of a kind:

32kort:



In[36]:= deck = Sort[Join[Range[7, 14], Range[7, 14], Range[7, 14], Range[7, 14]]];
hands = Subsets[deck, {5}];
FourOfKindQ32[{___, x_, x_, ___}] := False;
FourOfKindQ32[{___, x_, x_, x_, ___}] := False;
FourOfKindQ32[{___, x_, x_, ___, y_, y_, ___} /; x != y] := False;
FourOfKindQ32[{___}] := False;
FourOfKindQ32[{___, x_, x_, x_, x_, ___}] := True;
Count[hands, _?FourOfKindQ32]

Out[43]= 224

52kort:

In[44]:= deck = Sort[Join[Range[1, 13], Range[1, 13], Range[1, 13], Range[1, 13]]];
hands = Subsets[deck, {5}];
FourOfKindQ52[{___, x_, x_, ___}] := False;
FourOfKindQ52[{___, x_, x_, x_, ___}] := False;
FourOfKindQ52[{___, x_, x_, ___, y_, y_, ___} /; x != y] := False;
FourOfKindQ52[{___}] := False;
FourOfKindQ52[{___, x_, x_, x_, x_, ___}] := True;
Count[hands, _?FourOfKindQ52]

Out[51]= 624



Full house:

32kort:

In[98]:= deck = Sort[Join[Range[7, 14], Range[7, 14], Range[7, 14], Range[7, 14]]];
hands = Subsets[deck, {5}];
FullhouseQ32[{___, x_, x_, ___}] := False;
FullhouseQ32[{___, x_, x_, x_, ___}] := False;
FullhouseQ32[{___, x_, x_, ___, y_, y_, ___} /; x != y] := False;
FullhouseQ32[{___}] := False;
FullhouseQ32[{x_, x_, x_, y_, y_} /; x != y] := True;
Count[hands, _?FullhouseQ32]


Out[105]= 672

52kort:

In[157]:= deck = Sort[Join[Range[1, 13], Range[1, 13], Range[1, 13], Range[1, 13]]];
hands = Subsets[deck, {5}];
FullhouseQ52[{___, x_, x_, ___}] := False;
FullhouseQ52[{___, x_, x_, x_, ___}] := False;
FullhouseQ52[{___, x_, x_, ___, y_, y_, ___} /; x != y] := False;
FullhouseQ52[{___}] := False;
FullhouseQ52[{x_, x_, y_, y_, y_} /; x != y] := True;
Count[hands, _?FullhouseQ52]




Out[164]= 1872



Nothing:

32kort:



In[75]:= deck = Sort[Join[Range[7, 14], Range[7, 14], Range[7, 14], Range[7, 14]]];
hands = Subsets[deck, {5}];
NothingQ32[{___, x_, x_, ___}] := False;
NothingQ32[{___, x_, x_, x_, ___}] := False;
NothingQ32[{___, x_, x_, ___, y_, y_, ___} /; x != y] := False;
NothingQ32[{___}] := True;
Count[hands, _?NothingQ32]

Out[81]= 57344

52kort:

In[165]:= deck = Sort[Join[Range[1, 13], Range[1, 13], Range[1, 13], Range[1, 13]]];
hands = Subsets[deck, {5}];
NothingQ52[{___, x_, x_, ___}] := False;
NothingQ52[{___, x_, x_, x_, ___}] := False;
NothingQ52[{___, x_, x_, ___, y_, y_, ___} /; x != y] := False;
NothingQ52[{___}] := True;
Count[hands, _?NothingQ52]

Out[171]= 1317888

Я получил неправильные значения, но не знаю, какпроблема

1 Ответ

0 голосов
/ 08 октября 2019

В ваших руках 3 в своем роде есть руки 4 в своем роде.

Примеры:

Take[Union[Cases[hands,_?ThreeOfKindQ32]],20]

, отображающий

{{7, 7, 7, 7, 8}, {7, 7, 7, 7, 9}, {7, 7, 7, 7, 10}, {7, 7, 7, 7, 11}, 
 {7, 7, 7, 7, 12}, {7, 7, 7, 7, 13}, {7, 7, 7, 7, 14}, {7, 7, 7, 8, 8}, 
 {7, 7, 7, 8, 9}, {7, 7, 7, 8, 10}, {7, 7, 7, 8, 11}, {7, 7, 7, 8, 12}, 
 {7, 7, 7, 8, 13}, {7, 7, 7, 8, 14}, {7, 7, 7, 9, 9}, {7, 7, 7, 9, 10}, 
 {7, 7, 7, 9, 11}, {7, 7, 7, 9, 12}, {7, 7, 7, 9, 13}, {7, 7, 7, 9, 14}}

Затем я либо ошибся, либо что-то не так с вашими шаблонами фулл-хауса. Когда я зачищаю твой код для этого, он дает мне ноль для подсчета. Я не понял, что происходит с этим. Можете ли вы запустить новую записную книжку и вставить для нее только ваш опубликованный код, оценить его и посмотреть, получите ли вы также ноль?

Когда я изменяю этот код на

FullhouseQ32[{___}] := False;
FullhouseQ32[{x_, x_, x_, y_, y_} /; x != y] := True;
FullhouseQ32[{x_, x_, y_, y_, y_} /; x != y] := True;

, я получаю то, чтоВроде бы правильный результат, но я не уверен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...