我需要计算滚动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~
会更好吗?
答案 0 :(得分:2)
我的偏好是:
d =: ([ (! <:) +)
并向二元
添加一个monadic选项d =: d~ : ([ (! <:) +) NB. 4 d 5 ( 4 rolls of 5 sided dice : 70 possible combinations)
我会添加评论,包括样本参数和预期目的,以节省我时间,我以后偶然发现它。
当然,最终版本将是0 d 0返回0的选择,即使它看起来有点复杂。