class ClickTracker extends Component {
trackClick(e){
}
componentWillMount() {
document.addEventListener('click', this.trackClick);
}
componentWillUnmount() {
document.removeEventListener('click', this.trackClick);
}
render(){
return (
{this.props.children}
);
}
}
Черновой набросок рекурсивного способа сделать это:
public static IEnumerable<KeyValuePair<int, int>> GetFrequenciesByOutcome(int nDice, int nSides)
{
int maxOutcome = (nDice * nSides);
Dictionary<int, int> outcomeCounts = new Dictionary<int, int>();
for(int i = 0; i <= maxOutcome; i++)
outcomeCounts[i] = 0;
foreach(int possibleOutcome in GetAllOutcomes(0, nDice, nSides))
outcomeCounts[possibleOutcome] = outcomeCounts[possibleOutcome] + 1;
return outcomeCounts.Where(kvp => kvp.Value > 0);
}
private static IEnumerable<int> GetAllOutcomes(int currentTotal, int nDice, int nSides)
{
if (nDice == 0) yield return currentTotal;
else
{
for (int i = 1; i <= nSides; i++)
foreach(int outcome in GetAllOutcomes(currentTotal + i, nDice - 1, nSides))
yield return outcome;
}
}
Если я не ошибаюсь, это должно выложить KeyValuePairs, организованный как [ключ, частота].
Править: К вашему сведению, после выполнения этого, это показывает частоты для GetFrequenciesByOutcome (2, 6), чтобы быть:
2: 1
3: 2
4: 3
5: 4
6: 5
7: 6
8: 5
9: 4
10: 3
11: 2
12: 1
Существуют 6*6 = 36 комбинаций для двух игр в кости.
2 = 1+1 может только появиться однажды, таким образом, его частота является 1/36. 3 = 1+2 или 2+1, таким образом, его частота является 2/36 = 1/18. 4 = 1+3, 2+2, или 3+1, таким образом, его частота является 3/36 = 1/12.
Можно убрать остальных к двенадцать.
Любой игрок трик-трака знает их хорошо.
Нет никакого реального "алгоритма" или необходимого моделирования - это - простое вычисление на основе формулы, полученной De Moivre:
http://www.mathpages.com/home/kmath093.htm
И это не "кривая нормального распределения" или нормальное распределение.
Существует много материала онлайн о вероятности игры в кости. Вот одна ссылка, которая выручила меня с Euler вопросом Проекта:
Реализация JavaScript с помощью динамического функционального создания:
<script>
var f;
function prob(dice, value)
{
var f_s = 'f = function(dice, value) {var occur = 0; var a = [];';
for (x = 0; x < dice; x++)
{
f_s += 'for (a[' + x + '] = 1; a[' + x + '] <= 6; a[' + x + ']++) {';
}
f_s += 'if (eval(a.join(\'+\')) == value) {occur++;}';
for (x = 0; x < dice; x++)
{
f_s += '}';
}
f_s += 'return occur;}';
eval(f_s);
var occ = f(dice, value);
return [occ, occ + '/' + Math.pow(6, dice), occ / Math.pow(6, dice)];
};
alert(prob(2, 12)); // 2 die, seeking 12
// returns array [1, 1/36, 0.027777777777777776]
</script>
Править: Скорее разочарованный никто не указал на это; должен был заменить 6 * dice
с Math.pow(6, dice)
. Больше никаких ошибок как этот...
Аккуратный фактоид...
Знаете ли Вы, что треугольник Паскаля является распределением вероятностей сумм 2-сторонней игры в кости N?
1 1 - 1 die, 1 chance at 1, 1 chance at 2
1 2 1 - 2 dice, 1 chance at 2, 2 chances at 3, 1 chance at 4
1 3 3 1 - 3 dice, 1 chance at 3, 3 chances at 4, 3 chances at 5, 1 chance at 6
1 4 6 4 1 - etc.
Кажется, существует некоторая тайна, окружающая точно, "почему" это, и хотя duffymo объяснил часть ее, я смотрю на другое сообщение, в котором говорится:
Не должно быть никакой причины, почему 5, 6 и 7 должен быть прокручен больше [чем 2], так как первый список умирания является независимым событием от второго списка умирания, и у них обоих есть равная вероятность 1-6 из того, чтобы быть прокрученным.
Существует определенное обращение к этому. Но это неправильно..., потому что первый список влияет на возможности. Обоснование может, вероятно, наиболее легко быть сделано через пример.
Скажите, что я пытаюсь выяснить, более вероятна ли вероятность прокрутки 2 или 7 на двух играх в кости. Если я прокручиваюсь, первые умирают и получают 3, каковы мои возможности теперь прокрутки в общей сложности 7? Очевидно, 1 в 6. Каковы мои возможности прокрутки в общей сложности 2? 0 в 6..., потому что нет ничего, которое я могу прокрутиться на втором, умирают, чтобы иметь мое общее количество быть 2.
Поэтому 7 очень (большинство), вероятно, чтобы быть прокрученным..., потому что независимо от того, что я прокручиваю на первом, умирают, я могу все еще достигнуть, корректное общее количество путем прокрутки правильного числа на втором умирают. 6 и 8 одинаково немного менее вероятны, 5 и еще 9, и так далее, пока мы не достигаем 2 и 12, одинаково вряд ли в 1 в 36 шансах за штуку.
При графическом изображении этого (сумма по сравнению с вероятностью), Вы получите хорошую кривую нормального распределения (или, более точно, массивное приближение одного из-за дискретной природы Вашего эксперимента).