0

行、列、および各列変数の数値サイズを指定して、テーブルの値を取得しようとしています。

例えば:

getValue(row = 5, column = 1, column_variable_sizes = [3,2]) 

戻るだろう

1

これは、関数が戻り値を取得するために「生成」しているテーブルです。実際にはテーブル全体 (戻り値のみ) を生成する必要はなく、テーブルはデータ構造で表されません。

       column 
row |  0   1
---------------
0   |  0   0
1   |  0   1
2   |  1   0
3   |  1   1
4   |  2   0
5   |  2   1*

わかりやすいように、戻り値の横に * が付いています。

getValue 関数の書き方に関するアイデアはありますか?

ありがとう

EDIT : の呼び出しの別の例getValue()

getValue(row = 7, column = 2, column_variable_sizes = [3,2,3,2]) 

戻るだろう

0


       column 
row |  0   1   2   3
--------------------
0   |   0   0   0   0
1   |   0   0   0   1
2   |   0   0   1   0
3   |   0   0   1   1
4   |   0   0   2   0
5   |   0   0   2   1
6   |   0   1   0   0
7   |   0   1   0*  1
8   |   0   1   1   0
9   |   0   1   1   1
10  |   0   1   2   0
11  |   0   1   2   1
... |  ... ... ... ...

繰り返しますが、テーブル自体は存在しません。返される値のみが関数によって生成されます。

column_variable_sizes各列変数のドメインのカーディナリティを参照します。

たとえば、[3,2,3,2] は次のことを意味します。

  • 列 0 の変数は 3 つの値 (0、1、2) を持つことができます
  • 列 1 の変数は 2 つの値 (0 ,1) を持つことができます
  • 列 2 の変数は 3 つの値 (0、1、2) を持つことができます
  • 列 3 の変数は 2 つの値 (0、1) を持つことができます
4

1 に答える 1

1

次の Python スクリプトは、同じ「テーブル」を作成する必要があります。

def getCell(row, column, column_variable_sizes):
    basecap = 1;
    if column + 1 < len(column_variable_sizes):     
        for i in range(column + 1, len(column_variable_sizes)):
            basecap *= column_variable_sizes[i];

    columncap = column_variable_sizes[column];

    return (row / (basecap)) % columncap

column_sizes = [3, 2, 3, 2]

for y in range(0, 12):
    column = "";
    for x in range(0, 4):
        column += str(getCell(y, x, column_sizes)) + " "

print column
于 2012-11-09T17:03:37.077 に答える