首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >D&D技能挑战

D&D技能挑战
EN

Code Golf用户
提问于 2015-12-15 19:55:49
回答 4查看 532关注 0票数 14

在龙与地下城中,几乎所有的事情都是由滚动的模具决定的。通常,如果滚动大于或等于指定值,则尝试执行任何您想做的操作都会成功,否则会失败。最常见的是,一个20边模具(又名d20)是用来滚动的.

其他时候,使用技能挑战系统。它类似于上面描述的简单的系统,但成功取决于运动员(S)是否成功,在失败一定次数之前,个人滚动一定次数。例如,这位球员(S)可能试图用有限数量的锁头在一扇门上撬开多个锁。单个成功的滚动表示成功地选择了其中的一个锁,单个失败的滚动表示断锁。总体上的成功意味着在打开所有锁签之前成功地打开所有的锁。

此外,某些辊可以是临界辊。在d20上,滚动1是一个关键的失败,导致整个挑战立即失败(在上面的例子中,球员(S)可能会意外地提醒后卫)。滚动一个20是一个关键的成功,结果立即成功的整个挑战(在上面的例子中,球员(S)可能会找到一组钥匙的锁,消除了挑选他们的需要)。在关键滚动的情况下,挑战立即结束,结果决定,无论以往的成功和失败的数目。

在这个挑战中,你会遇到困难,需要成功的次数,失败的次数。您必须模拟玩家尝试挑战,并输出结果。

输入

3整数,表示单个滚动成功所必须满足或超过的值、挑战成功所需的成功次数以及挑战失败的次数。只要您指定要使用的顺序和格式,输入的顺序和格式就无关紧要。困难在1到20之间,包括在内,成功和失败的数目都在1到100之间。

输出

每个d20滚动的结果(按顺序排列为整数),以及挑战的总体结果(一个真实性/falsey值)。格式并不重要,只要单个结果是有序的,总体结果要么出现在所有单个滚动之前,要么出现在所有单个滚动之后(例如,您不能在滚动的中间输出总体结果),并且指定您使用的输出格式,并一致使用它。

示例(括号中的值用于解释,不需要包括在内):

输入:

代码语言:javascript
运行
复制
12 5 3 (difficulty successes failures)

输出:

代码语言:javascript
运行
复制
15 (success, 1-0)
10 (failure, 1-1)
5  (failure, 1-2)
16 (success, 2-2)
12 (success, 3-2)
15 (success, 4-2)
19 (success, 5-2)
True (overall success)

输入:

代码语言:javascript
运行
复制
15 2 3 (difficulty failures successes)

输出:

代码语言:javascript
运行
复制
0  (overall failure)
15 (success, 1-0)
12 (failure, 1-1)
13 (failure, 1-2)

输入:

代码语言:javascript
运行
复制
5 5 10 (successes failures difficulty)

输出:

代码语言:javascript
运行
复制
11 (success, 1-0)
5  (failure, 1-1)
20 (critical success)
1  (overall success)

输入:

代码语言:javascript
运行
复制
3 10 3 (failures difficulty successes)

输出:

代码语言:javascript
运行
复制
12 (success, 1-0)
11 (success, 2-0)
1  (critical failure)
False (overall failure)

规则

  • 这是密码-高尔夫,所以以字节为单位的最短代码将获胜
  • 您必须为每个卷随机选择1到20之间的整数值(包括在内)。每个值应具有相同的被选择的概率(或尽可能接近相等)。
EN

回答 4

Code Golf用户

发布于 2015-12-16 01:54:53

Python,134个字节

谢谢Pietu1998保存的字节

代码语言:javascript
运行
复制
from random import*
def g(a,b,c):
 s,z=[],[c,b]
 while z[0]*z[1]:d=randint(1,20);z[a<d]-=[1,z[a<d]][d in[1,20]];s+=[d]
 return[z[0]]+s

很简单,也许可以得到更多的金牌,但是我们需要一些东西来解决这个问题。在网上试试

票数 4
EN

Code Golf用户

发布于 2015-12-17 22:15:28

Ruby2.2,75字节

代码语言:javascript
运行
复制
f=->(v,s,f){p(r=rand(20)+1)<2?f=0:r>19?s=0:r<v ?f-=1:s-=1while s*f>0
p s<1}

基本迭代解示例运行:

代码语言:javascript
运行
复制
f[12, 5, 3]

可能产出:

代码语言:javascript
运行
复制
11
17
8
14
7
false

您可以看到它在IDEONE 这里上运行。

票数 1
EN

Code Golf用户

发布于 2015-12-16 13:54:06

VBA 180字节

代码语言:javascript
运行
复制
Sub P(d,s,f):k=1
Do While x<s And v<f:r=Int(20*Rnd()+1)
If r=20 Then x=s
If r=1 Then v=f
If r>=d Then: x=x+1: Else: v=v+1
Debug.Print r:Loop:If v>=f Then k=0
Debug.Print k:End Sub

示例输出

代码语言:javascript
运行
复制
P 12,5,3
 18 
 2 
 19 
 8 
 11 
 0 

输出的最后一个数字将是0表示False1表示True。每个卷用换行符隔开。这使用了构建在RNG rnd()中的VBA,这是众所周知的不是那么随意,但这应该尽可能地满足需求。

代码语言:javascript
运行
复制
Sub P(d,s,f)
k=1
Do While x<s And v<f               'Keep Rolling while Current Successes and Failures are less then the Maximum Allowed
r=Int(20*Rnd()+1)                'Creates a Randomish Number between 1 and 20
If r=20 Then x=s                   'Checks for Crit Success
If r=1 Then v=f                    'Checks for Crit Failure
If r>=d Then: x=x+1: Else: v=v+1   'Increments Current Success or Fails
Debug.Print r                      'Prints (Could us MSGBOX, it is shorter)
Loop
If v>=f Then k=0                   'Checks & Changes Total Outcome to False
Debug.Print k                      'Prints (Could us MSGBOX, it is shorter)
End Sub
票数 0
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/66707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档