
import itertools

class Memory:

    def __init__(self, nfils,ncols):
        self.nfils = nfils
        self.ncols = ncols
        self.__cartes = {}

    def __getitem__(self, pos):
        if pos in self.__cartes:
            return self.__cartes[pos]
        else:
            return '*'

    def __setitem__(self, pos, c):
        if c == '*':
            if pos in self.__cartes:
                del self.__cartes[pos]
        else:
            self.__cartes[pos] = c

    def __len__(self):
        return len(self.__cartes)

    def omplir(self, s, i):
        for k in range(self.ncols):
            self[i,k] = s[k]

    def capgira(self, p, q):
        if self[p] == self[q]:
            self[p] = '*'
            self[q] = '*'

    # Solució de l'exercici 2; també es pot resoldre com un generador
    def parelles(self, c):
        it1 = itertools.product(range(self.nfils), range(self.ncols)) 
        it2 = filter(lambda p: self[p] == c, it1)
        return it2

    
