Suposem que tenim una matriu L de
lletres minúscules, amb
files i
columnes, i una altra matriu P de nombres
enters positius, també amb
files i
columnes. Donada una string s
podem atorgar a aquesta string una determinada puntuació si
apareix a L, en funció dels valors a les mateixes
posicions de P.
Per exemple, suposem que L té 3 files i 4 columnes:
L = [['a','b','c','a'],
['b','c','a','f'],
['c','a','b','c']]
i P, també amb 3 files i 4 columnes:
P = [[10,20,30,40],
[50,60,70,80],
[15,25,35,45]]
Mirem si una string apareix a L fent
coincidir les lletres de l’string amb les posicions de la
matriu L d’esquerra a dreta o de dalt a baix (no serveix si
apareix de dreta a esquerra o de baix a dalt).
Així doncs:
L’string ’abc’ apareix tres cops a
L: a) primera fila, columnes 0, 1 i 2, b) tercera fila,
columnes 1, 2 i 3, i c) primera columna, files 0, 1 i 2. D’acord als
punts especificats a P, l’string
’abc’ obté 60 punts en el cas a), 105 punts al cas b), i 75
punts al cas c).
L’string ’fc’ apareix només un cop, a la
darrera columna, files 1 i 2. Aquí obtindrà 125 punts.
Finalment, l’string ’fa’ senzillament no
apareix.
Escriure una funció max_punt(L,P) que,
donada una matriu L de lletres minúscules,
amb
files i
columnes, i una altra matriu P de nombres
enters positius, també amb
files i
columnes, retorni una funció.
Aquesta funció retornada, anomenem-la fret, és una
funció que té com a paràmetre una string
s, i ha de retornar la màxima puntuació
que pot obtenir s, si s apareix a
L, o bé l’string ’no’, si
s no apareix a L.
La funció té dues matrius de les mateixes dimensions (files i columnes) com a paràmetres.
La funció demanada ha de retornar una funció d’una string,
que retorna un nombre enter o l’string ’no’.
Un cop definida la funció, en provar-la al REPL de Python us hauria de sortir el mateix que podeu observar més avall.
>>> f = max_punt([['a','b','c','a'],['b','c','a','e'],['c','a','b','d']],[[10,20,30,40],[50,60,70,80],[15,25,35,45]]) >>> f('bca') 180 >>> f('cabb') 'no' >>> f('a') 70 >>> f = max_punt([['z']],[[1000000]]) >>> f('y') 'no' >>> f('z') 1000000 >>>