1

有没有真正简单的方法来完成类似于A.J 中“n 选择 k”排列的 Anagram Index ( ) 函数的事情?

所以,我喜欢A.J。只是为了表明我对它有点理解:

   A. 0 3 4 2 1
17
   17 A. i.5
0 3 4 2 1

我也知道我可以使用它来排列列表 ( 17 A. things) 或使用结果从列表中进行选择,如果有任何不同的话 ( (17 A. i.5) { things)。

我正在寻找一个函数,该函数将产生一个类似的数字,A.并且还可以逆向重新创建“n 选择 k”排列的选择,无论是否有替换。顺序对我来说确实很重要,因此0 2 7与 不同7 0 2,但我会对不关心顺序的版本感兴趣(例如在 Yahtzee 中掷骰子时)。

我准备开始自己解决这个问题并编写自己的函数,但我只需要假设这是一个已解决的问题,尤其是在像 J 这样的语言中,它包含A.一个原语。

为了清楚起见,“n 选择 k”,我说的是掷骰子(“6 选择 3,有替换”用于滚动 3 个骰子,一个接一个)和赛马获胜者(“20 选择 3,没有替换” 20 匹马比赛中的前 3 匹马)。

4

1 回答 1

3

对于“6选3,有替换”,您可以使用目录{

{3#<i.6
┌─────┬─────┬─────┬─────┬─────┬─────┐
│0 0 0│0 0 1│0 0 2│0 0 3│0 0 4│0 0 5│
├─────┼─────┼─────┼─────┼─────┼─────┤
│0 1 0│0 1 1│0 1 2│0 1 3│0 1 4│0 1 5│
├─────┼─────┼─────┼─────┼─────┼─────┤
...

您可以将反向作为上述矩阵的索引(未分解),feg:

(0 0 0) I.~ >,{3#<i.6
0
(0 1 0) I.~ >,{3#<i.6
6
(5 5 5) I.~ >,{3#<i.6
215
(4 5 1) I.~ >,{3#<i.6
175

175 { >,{3#<i.6
4 5 1

jsoftware.com上有一些关于组合的相关文章:组合索引组合等。

于 2013-10-28T21:08:17.227 回答