3

1 から 3 までの数字を取り、考えられる各組み合わせが表されるような行列を作成したいとします。たとえば、次のようになります。

1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

これを行うために J で定式化した単項動詞を次に示します。

($~ (-:@# , 2:)) , ,"0/~ 1+iy

,"0/~ 1+i.yもともとそれで十分だと思っていましたが、残念ながら次の出力が生成されます。

1 1
1 2
1 3

2 1
2 2
2 3

3 1
3 2
3 3

つまり、その形状は 3 3 2 で、9 2 の形状が必要です。それを修正するために考えられる唯一の方法は、すべてのデータを新しい形状に注ぐことです。これを行うには、もっと簡潔な方法が必要だと確信しています。誰でも知っていますか?

4

3 に答える 3

5

中間結果の再形成は単純化できます。一番上の軸を削除するのは一般的に行われる,/ので、あなたの場合、完成したフレーズは,/ ,"0/~ 1+i.y

于 2010-09-24T13:38:04.160 に答える
4

1つの方法({順列カタログ化の容量でモナドとして使用):

>,{ 2#<1+i.y

編集:

このスキームでいくつかの楽しみがあります。

すべての可能な順列:

>,{ y#<1+i.y

順番に設定可能な番号:

>,{ x#<1+i.y
于 2010-09-17T21:33:51.287 に答える
2

この質問は古いと思いますが、もっと簡単な方法があります。3 進数で 9 まで数え、1 を足すというものです。

   1 + 3 3 #: i.9
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3

3 3 & #:2 桁になります。一般的な 'base 3' 動詞は3 & #.^:_1.

于 2015-01-13T19:28:11.533 に答える