Calcular a classificação de uma combinação?

Quero pré-calcular alguns valores para cada combinação em um conjunto de combinações. Por exemplo, ao escolher 3 números de 0 a 12, calcularei algum valor para cada um:

>>> for n in choose(range(13), 3):
    print n, foo(n)

(0, 1, 2) 78
(0, 1, 3) 4
(0, 1, 4) 64
(0, 1, 5) 33
(0, 1, 6) 20
(0, 1, 7) 64
(0, 1, 8) 13
(0, 1, 9) 24
(0, 1, 10) 85
(0, 1, 11) 13
etc...

Eu quero armazenar esses valores em uma matriz para que, dada a combinação, eu possa calcular os valores e obter o valor. Por exemplo:

>>> a = [78, 4, 64, 33]
>>> a[magic((0,1,2))]
78

O que seriamagic estar?

Inicialmente, pensei em armazená-lo como uma matriz tridimensional de tamanho 13 x 13 x 13, para que eu possa indexá-lo facilmente dessa maneira. Embora isso seja bom para 13, escolha 3, isso teria sobrecarga demais para algo como 13, escolha 7.

Eu não quero usar um dict porque, eventualmente, esse código estará em C, e uma matriz seria muito mais eficiente de qualquer maneira.

UPDATE: Eu também tenho um problema semelhante, mas usando combinações com repetições, então qualquer resposta sobre como obter a classificação desses seria muito apreciada =).

ATUALIZAÇÃO: Para deixar claro, estou tentando economizar espaço. Cada uma dessas combinações, na verdade, indexa em algo que ocupa muito espaço, digamos 2 kilobytes. Se eu usasse uma matriz 13x13x13, seriam 4 megabytes, dos quais eu preciso apenas de 572 kilobytes usando (13 escolhem 3) pontos.

questionAnswers(7)

yourAnswerToTheQuestion