Comunque calcolando tutte le esatte combinazioni possibili in python ne risultano 224 e con un piccolo aiuto sempre di python puoi rappresentare il tutto in 226 celle
Scusa ma se stiamo parlando della stessa cosa, le combinazioni sono 232
codice:
from random import randint
choices = [0, 1, 2, 3, 4];
combos = [[], [], []]
elements = {}
for i in range(100000):
for x in range(5):
rndRow = randint(0, 2)
rndIdx = randint(0, len(choices)-1)
rndEl = choices[rndIdx]
del choices[rndIdx]
if rndRow == 0:
if len(combos[0]) < 3:
combos[0].append(str(rndEl))
elif randint(0, 1) == 0:
combos[1].append(str(rndEl))
else:
combos[2].append(str(rndEl))
elif rndRow == 1:
combos[1].append(str(rndEl))
elif rndRow == 2:
combos[2].append(str(rndEl))
key = str(sorted(combos[0])) + \
str(sorted(combos[1])) + \
str(sorted(combos[2]))
if key not in elements:
elements[key] = 0;
choices = [0, 1, 2, 3, 4];
combos = [[], [], []]
print len(elements)
#for e in elements:
# print e
matias@matias-desktop:~/Desktop$ python test.py
232
Comunque ho implementato la tua lineare, con qualche piccola modifica (avevo bisogno di verificare la combinazione che avesse il maggior punteggio).
https://pastebin.com/w301ADdi
Direi che per il momento è la migliore:
codice:
real 0m48.190s
user 0m48.048s
sys 0m0.004s
Utilizzo 15 bit perché per vedere quali elementi sono presenti in una riga servono almeno n bit dove n = |valori_fra_cui_scegliere| = 5 nel nostro caso e ci sono 3 righe per cui n*3=5*3=15.
Continuo a non capire perchè la prima riga ha massimo 3 valori.