Я пытаюсь изучить библиотеку Python itertools
, и я подумал, что хорошим тестом будет симуляция рулонов кости. Легко сгенерировать все возможные рулоны, используя product
и подсчитывая количество возможных способов сделать это с помощью библиотеки collections
. Я пытаюсь решить проблему, возникающую в играх, таких как Monopoly: когда удваиваются качки, вы снова катитесь, и ваша итоговая сумма является суммой двух рулонов.itertools кубики рулонов: удваивает рулон дважды
Ниже приводится моя начальная попытка решить проблему: два счетчика, один для парных и другой для не двухместных. Я не уверен, есть ли хороший способ их комбинировать или если два счетчика - лучший способ сделать это.
Я ищу гладкий способ решения (путем перечисления) проблемы с броском кубика с удвоениями с использованием itertools и коллекций.
import numpy as np
from collections import Counter
from itertools import *
die_n = 2
max_num = 6
die = np.arange(1,max_num+1)
C0,C1 = Counter(), Counter()
for roll in product(die,repeat=die_n):
if len(set(roll)) > 1: C0[sum(roll)] += 1
else: C1[sum(roll)] += 1
Не могли бы вы сформулировать проблему немного более формально? –
@KarlKnechtel Перечислять, используя библиотеки itertools и коллекции, ненормированное распределение вероятности, которое возникает, когда свернуты строки 'n' с номерами от 1 до' m'. Функция, подлежащая подсчету, представляет собой сумму 'n', за исключением случаев, когда все кости совпадают. Если все кости совпадают по первому рулону, то подсчитывается количество суммы первого броска и второго рулона. Неважно, совпадают ли они во втором броске. Буквы с двумя кубиками, пронумерованные 1..6: '[3,4], [2,1], [[4,4], [6,2]]", дающие итоговые значения '[7,3, 16] '. – Hooked
Вы можете решить эту проблему в моделировании стиля Монте-Карло. Если вы думаете об этой проблеме в древовидном представлении: начните с root, прокрутите один раз к детям с глубиной = 1, из которых только ребенок с удвоениями имеет поддерево более глубоких детей той же структуры. Это означает, что дети с двойным роллингом обращаются к корню. Теперь у вас хорошая структура и вы можете делать случайные рендеринги, начиная с root, чтобы оценить вероятность события. – Mai