K个N面骰子的不同卷数

时间:2013-10-03 01:56:39

标签: dice j tacit-programming oeis

我需要计算滚动K骰子可能产生的不同可能卷的数量,每个骰子都有N面。我对roll的定义是{1,1,2,3,4}等于{1,4,3,1,2}(顺序无关紧要),但不是{1,1,3 ,3,3}(它们不是同一组结果)。例如:Yahtzee是一个涉及5个6面骰子的游戏 - 至少最初是在重新卷入之前 - 因此不同卷的数量是252.当N = K的情况导致OEIS sequence A001700

如果我没有错误,这是由“(N-1 + K)选择(N-1)”,或等效地,“(N + K-1)选择K”,即{{在J.中,这引出了四种不同的默认表达:

  • K ! <: K + N。简单的火车,没有括号,但我需要使用上限。
  • d =: ([ ! [: <: +)。没有上限,但是勾勒出内钩。
  • d =: ([ (! <:) +)。只有三个动词列车,但使用的是Compose。它使用d =: (] !&<: +)版本。
  • (<: N) ! <: K + N。这个将“C(N + K-1,K)”重写为“C(N + K,K)* N /(N + K)”。这是更丑陋的,但是在0方面的0个案例中,它给出了0而不是1,这可以说是一个不那么荒谬的答案。

其中哪一项是最“J-ish”解决方案?

此外,所有这些的monadic案例都没有意义:前三个d =: (([ ! +) * ] % +)和第四个1 0 0 0 0 ...。对于这个动词,更合乎逻辑的monad将是0 1 1 1 ...给出的反身,那么将这个动词定义为d~会更好吗?

1 个答案:

答案 0 :(得分:2)

我的偏好是:

d =: ([ (! <:) +)

并向二元

添加一个monadic选项
d =: d~ : ([ (! <:) +) NB. 4 d 5 ( 4 rolls of 5 sided dice : 70 possible combinations)

我会添加评论,包括样本参数和预期目的,以节省我时间,我以后偶然发现它。

当然,最终版本将是0 d 0返回0的选择,即使它看起来有点复杂。