Функция планшета квази-правды

Я пытаюсь получить значения таблицы с учетом строки, столбца и числового размера каждой переменной столбца.

Например:

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?

Спасибо

РЕДАКТИРОВАТЬ: еще один пример вызова 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)

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
Другие вопросы по тегам