Questions tagged «probability-theory»

挑战涉及随机变量和随机过程的计算概率。

2
DSA的人才库
我和一些朋友玩过DSA(主要是德国的桌面RPG,与D&D相似)。我想知道通过传球的机会是多少,因此您将必须编写一些代码来进行计算。 您的角色由统计信息(从8到14)和(TV)才能值(0到21)定义。现在,我们将以攀登为例。 才能测试 一个天赋(攀爬)如下所示:(勇气,敏捷,力量)电视:7.要测试一个天赋的角色,请使用20面骰子在这些统计数据上滚动,并尝试使其低于或等于该统计数据你做得很好。如果没有,您可以使用电视点以1:1的比例减少滚动。 例 一位有勇气12,敏捷13和力量14的猎人正在尝试爬树,他的电视是7。 他掷出3,该值低于12,因此他通过了掷骰。 然后他将17、17比4翻了17、17,所以剩下4个电视用完了,剩下3个。 对于最后一卷,您将获得14分。 所有的掷骰都通过了,猎人设法爬上了树,剩下了3台电视。 输入项 您选择的任何格式的4个值,取自您语言的标准输入。但是必须按此顺序。 例如12 13 14 7或12,13,14,7或为数组{12,13,14,7}或混合[12, 14, 8], 3 输出量 卷多久通过一次的机会。 例如(对于上述值)0.803 12,14,8,3 = 0.322 11,11,12,11 = 0.840 值得一提的是:这里再次不是格式化的问题,但可以按照自己的意愿按以下顺序输出: failed/with 0/with 1/with 2/with 3/with 4/with 5/with 6/with 7 以此类推,直到没有电视。 12,13,14,7 = 0.197/0.075/0.089/0.084/0.078/0.073/0.068/0.063/0.273 12,14,8,3 = 0.678/0.056/0.051/0.047/0.168 挑战,规则和奖金 您将发现在给定输入的情况下有机会使掷骰通过率达到+-0.5%。 如果您的程序还输出了通过n电视的机会(请参见输出),则为-20%。 这是 代码高尔夫球,因此以字节为单位的最短代码胜出!

6
卡对概率
给定一个卡片组,其中N张卡片由N个卡片组成,其中N个卡片的整数值为[ 1,M ],总共N * M张卡片,计算出值为1的卡片与值为2的卡片相邻的概率。 您的解决方案可能是精确的或近似的,并且在给定相同输入的情况下,每次运行都不必相同。给定的答案应在真实解决方案的+/- 5%之内(除非RNG不太可能对您不利)。您的程序应在合理的时间内给出答案(例如,使用任何硬件不到10分钟)。您可以假设M和N合理小,并且不需要进行错误检查。 卡组不是周期性的,因此如果第一张卡为1,最后一张卡为2,则这不满足邻接要求。 作为测试用例,对于N = 4和M = 13(标准的52张卡片套),预期解决方案约为48.6%。 这是使用随机混洗的Python + NumPy中的非高尔夫实现示例: from __future__ import division from numpy import * def adjacent(N, M): deck = array([i for i in range(1, M+1)]*N) trials = 100000 count = 0 for i in range(trials): random.shuffle(deck) ores = (deck == …

6
实施用于概率分布的API
介绍 在这个挑战中,您的任务是实现一组简单的函数,这些函数共同构成一个用于简单概率分布的可用小型库。为了适应人们喜欢在这里使用的一些更深奥的语言,可以接受以下实现: 定义命名函数(或最接近的对等函数)集合的代码段。 表达式集合,这些表达式的结果为命名或匿名函数(或最接近的等效函数)。 单个表达式,其结果为几个命名或匿名函数(或最接近的对等函数)。 独立程序的集合,这些独立程序从命令行,STDIN或最接近的等效项获取输入,并输出到STDOUT或最接近的等效项。 功能 您应实现以下功能,并根据需要使用较短的名称。 uniform将两个浮点数a和作为输入b,并返回的均匀分布[a,b]。你可以假设a < b; 情况a ≥ b是不确定的。 blend将三种概率分布作为输入P,Q和R。它返回一个概率分布S,其平值x,y和z从P,Q和R分别和的产率y,如果x ≥ 0和z如果x < 0。 over接受一个浮点数f和一个概率分布作为输入P,并返回从中抽取x ≥ f的随机数所保持的概率。xP 供参考,over可以定义如下(以伪代码表示): over(f, uniform(a, b)): if f <= a: return 1.0 else if f >= b: return 0.0 else: return (b - f)/(b - a) over(f, blend(P, Q, R)): …

1
淘汰概率
淘汰赛是一种篮球比赛,球员轮流投篮。它按两人比赛的顺序进行,每场比赛都有可能“淘汰”其中一名球员。 假设球员A B C D和他们的投篮机会和制造篮筐的机会0.1 0.2 0.3 0.4分别与比赛中的其他球员无关。两位选手在该行的前面,A而B“战斗”。由于A先行,他是后卫,在被淘汰出局的危险,并且B是攻击者,而不是立即消除危险。A首先射击。如果成功A,则A已经成功防御,并前进到了队伍的后部。该行将更改为B C D A。如果A没有成功,则B射击。如果B成功,则出线A并B转到行尾,因此行变为C D B。如果两者都不A如果没有B成功,则重复此过程,并A再次射击,直到A或B做出一个篮子。 假设线路更改为B C D A(A已成功防御)。现在,B与C“战斗”B作为后卫,并且C是攻击者。重复此过程,直到只剩下一个人为止。那个人是赢家。 您的任务是计算每个人赢得一篮子机会的获胜概率。 输入: 数字列表,例如0.1 0.2或0.5 0.5 0.5 0.5,其中第n个数字是第n个个玩家上篮。您可以采用任意格式的输入,包括作为函数的参数。 输出量: 数字列表,其中第n个数字是第n个玩家赢得比赛的机会。您的数字至少在90%的时间内必须精确到至少两位小数。这意味着您可以使用基于仿真的方法。但是,如果您的代码不是基于仿真的(可以保证返回正确的答案至少到小数点后6位),那么您的分数将减少30%。 之间的示例0.5 0.5:呼叫玩家A和B。设pA获胜的概率。A拥有2/3的成功卫冕的机会(因为有一个1/2机会A得分,一个1/4机会,A命中和B得分和1/4机会都错过并重复上述过程)。如果A未能防守,他将被淘汰并B获胜。如果A防御,则该行变为B A。由于情况是对称的,因此A获胜的概率为(1 - p)。我们得到: p = 2/3 * (1 - p) + 1/3 * 0。解决,我们得到p = 2/5。输出应为2/5 3/5或0.4 0.6。 我没有足够的机率做更复杂的例子。 如果您需要更多的测试用例,请参考以下几个示例: 0.1 0.2 …

4
精确计算概率
此任务是关于编写代码以准确计算概率。输出应该是精确的概率,以其最大简化形式的分数表示。那是它永远不应该输出4/8,而应该1/2。 对于某个正整数n,请考虑一个长度为1s和-1s的均匀随机字符串,n并将其称为A。现在将A其串联为第一个值。就是说A[1] = A[n+1]从1 A开始的索引 现在具有length n+1。现在还考虑长度的第二随机串n,其第一n值是-1,0或1的概率是1 / 4,1 / 2,1/4每并调用它B. 例如,考虑n=3。对于可能的值A,并B可能会A = [-1,1,1,-1]和B=[0,1,-1]。在这种情况下,两个内积是0和2。 现在考虑的内积A[1,...,n]和B和的内积A[2,...,n+1]和B。 您的代码必须输出两个内积均为零的概率。 对于n=1这种可能性显然是1/2。 我不介意n代码中的指定方式,但是如何更改它应该非常简单明了。 语言和图书馆 您可以使用任何喜欢的语言和库。我想运行您的代码,因此请尽可能提供有关如何在Linux中运行/编译代码的完整说明。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.