Solució de l’examen Parcial - Torn 2¶
- Organització:
Secció ETSEIB, Departament de Ciències de la Computació, UPC
- Data:
28 d’octubre de 2025
- Copyright:
Reconeixement-CompartirIgual 4.0 No adaptada de Creative Commons
Jocs de proves
Els exemples que compten per la nota són només els que van seguits de # doctesttag: +TAG
Tests classe Memory¶
>>> from memory import Memory
>>> def dibuixa(m): # Funció auxiliar que dibuixa totes les cartes
... for f in range(m.nfils):
... for c in range(m.ncols):
... print(m[f,c], end='')
... print()
>>> m = Memory(2, 3)
>>> m.nfils, m.ncols # doctesttag: +TAG=1_Memory
(2, 3)
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
***
***
>>> m[0,1], m[0,2] = 'KT'
>>> m[1,0], m[1,2] = 'TE'
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
*KT
T*E
>>> len(m) # doctesttag: +TAG=1_Memory
4
>>> m[0,0], m[0,2] = '**'; dibuixa(m) # doctesttag: +TAG=1_Memory
*K*
T*E
>>> len(m) # doctesttag: +TAG=1_Memory
3
>>> m.omplir('AAA', 0)
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
AAA
T*E
>>> m.omplir('BBB', 1)
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
AAA
BBB
>>> m.capgira((0,0), (0,1))
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
**A
BBB
>>> m.capgira((0,2), (1,1))
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
**A
BBB
>>> len(m)
4
>>> m = Memory(3, 8)
>>> m.nfils, m.ncols # doctesttag: +TAG=1_Memory
(3, 8)
>>> len(m) # doctesttag: +TAG=1_Memory
0
>>> dibuixa(m)
********
********
********
>>> m[0,0] = 'C'
>>> m[2,1] = 'A'
>>> m[1,2] = 'B'
>>> m[1,4] = 'C'
>>> m[1,7] = 'C'
>>> m[2,5] = 'K'
>>> m[2,7] = 'E'
>>> len(m) # doctesttag: +TAG=1_Memory
7
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
C*******
**B*C**C
*A***K*E
>>> m[1,4] = '*'; dibuixa(m) # doctesttag: +TAG=1_Memory
C*******
**B****C
*A***K*E
>>> m[2,4], m[2,3] = '**'; len(m) # doctesttag: +TAG=1_Memory
6
>>> m.omplir('ABCDEFGH', 0)
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
ABCDEFGH
**B****C
*A***K*E
>>> m.omplir('BBCCTTAA', 2)
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
ABCDEFGH
**B****C
BBCCTTAA
>>> len(m) # doctesttag: +TAG=1_Memory
18
>>> m[1,0] = 'X'
>>> m[1,0] = '*'; len(m) # doctesttag: +TAG=1_Memory
18
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
ABCDEFGH
**B****C
BBCCTTAA
>>> m.omplir('ABCDEFGH', 0)
>>> m.omplir('ABCDEFGH', 1)
>>> m.omplir('ABCDEFGH', 2)
>>> m.capgira((0,0), (2,2))
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
ABCDEFGH
ABCDEFGH
ABCDEFGH
>>> m.capgira((2,5), (1,5))
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
ABCDEFGH
ABCDE*GH
ABCDE*GH
>>> m.capgira((1,7), (0,7))
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
ABCDEFG*
ABCDE*G*
ABCDE*GH
>>> m = Memory(6, 10)
>>> m.nfils, m.ncols # doctesttag: +TAG=1_Memory
(6, 10)
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
**********
**********
**********
**********
**********
**********
>>> m[0,0], m[0,9] = 'AB'
>>> m[5,0], m[5,9] = 'CD'
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
A********B
**********
**********
**********
**********
C********D
>>> len(m) # doctesttag: +TAG=1_Memory
4
>>> m[0,0], m[0,2] = '**'; dibuixa(m) # doctesttag: +TAG=1_Memory
*********B
**********
**********
**********
**********
C********D
>>> len(m) # doctesttag: +TAG=1_Memory
3
>>> m.omplir('AAABBBCCCE', 2)
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
*********B
**********
AAABBBCCCE
**********
**********
C********D
>>> m.omplir('XXXXXXXXXX', 4)
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
*********B
**********
AAABBBCCCE
**********
XXXXXXXXXX
C********D
>>> m.capgira((0,9), (2,4))
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
**********
**********
AAAB*BCCCE
**********
XXXXXXXXXX
C********D
>>> m.omplir('CASTANYADA', 1)
>>> m.omplir('IMPOSSIBLE', 3)
>>> m.capgira((4,2), (4,8))
>>> dibuixa(m) # doctesttag: +TAG=1_Memory
**********
CASTANYADA
AAAB*BCCCE
IMPOSSIBLE
XX*XXXXX*X
C********D
Tests mètode parelles¶
>>> m = Memory(3, 5)
>>> m.omplir('ABCCA', 0)
>>> m.omplir('AXBXA', 1)
>>> m.omplir('HDCFF', 2)
>>> for pos in m.parelles('B'): # doctesttag: +TAG=2_parelles
... print(pos, end='-')
(0, 1)-(1, 2)-
>>> for pos in m.parelles('A'): # doctesttag: +TAG=2_parelles
... print(pos, end='-')
(0, 0)-(0, 4)-(1, 0)-(1, 4)-
>>> for pos in m.parelles('H'): # doctesttag: +TAG=2_parelles
... print(pos, end='-')
(2, 0)-
>>> for pos in m.parelles('W'): # doctesttag: +TAG=2_parelles
... print(pos, end='-')
>>> m.omplir('XXXXX', 0)
>>> m.omplir('XXXXX', 2)
>>> m[0,1] = m[1,1] = m[2,2] = '***'
>>> for pos in m.parelles('X'): # doctesttag: +TAG=2_parelles
... print(pos, end='-')
(0, 0)-(0, 2)-(0, 3)-(0, 4)-(1, 3)-(2, 0)-(2, 1)-(2, 3)-(2, 4)-
>>> for pos in m.parelles('A'): # doctesttag: +TAG=2_parelles
... print(pos, end='-')
(1, 0)-(1, 4)-
Tests classe MemoryPlus¶
>>> from memoryplus import MemoryPlus
>>> mp = MemoryPlus(3, 7)
>>> mp.nfils, mp.ncols, mp.npunts1, mp.npunts2 # doctesttag: +TAG=3_MemoryPlus
(3, 7, 0, 0)
>>> mp.omplir('ABXCCAH', 0)
>>> mp.omplir('B@DX@EC', 1)
>>> mp.omplir('XDCFX@@', 2)
>>> mp.capgira((0,2), (2,0), 1)
>>> mp.npunts1, mp.npunts2 # doctesttag: +TAG=3_MemoryPlus
(2, 0)
>>> dibuixa(mp) # doctesttag: +TAG=3_MemoryPlus
AB*CCAH
B@DX@EC
*DCFX@@
>>> mp.capgira((2,1), (1,2), 2)
>>> mp.npunts1, mp.npunts2 # doctesttag: +TAG=3_MemoryPlus
(2, 2)
>>> dibuixa(mp) # doctesttag: +TAG=3_MemoryPlus
AB*CCAH
B@*X@EC
**CFX@@
>>> mp.capgira((2,3), (2,4), 1)
>>> mp.npunts1, mp.npunts2 # doctesttag: +TAG=3_MemoryPlus
(2, 2)
>>> dibuixa(mp) # doctesttag: +TAG=3_MemoryPlus
AB*CCAH
B@*X@EC
**CFX@@
>>> mp.capgira((1,1), (1,6), 1)
>>> mp.npunts1, mp.npunts2 # doctesttag: +TAG=3_MemoryPlus
(3, 2)
>>> dibuixa(mp) # doctesttag: +TAG=3_MemoryPlus
AB*CCAH
B**X@EC
**CFX@@
>>> mp.capgira((0,0), (2,5), 2)
>>> mp.npunts1, mp.npunts2, len(mp) # doctesttag: +TAG=3_MemoryPlus
(3, 3, 15)