Supongamos que tenemos una matriz L de
letras minúsculas, con
filas y
columnas, y otra matriz P de números
enteros positivos, también con
filas y
columnas. Dada una string s
podemos otorgar a esta string una determinada puntuación si
aparece en L, en función de los valores en las
mismas posiciones de P.
Por ejemplo, supongamos que L tiene 3 filas y 4
columnas:
L = [['a','b','c','a'],
['b','c','a','f'],
['c','a','b','c']]
y P, también con 3 filas y 4 columnas:
P = [[10,20,30,40],
[50,60,70,80],
[15,25,35,45]]
Decimos que una string aparece en L
haciendo coincidir las letras de la string con las posiciones
de la matriz L de izquierda a derecha o de arriba abajo (no
sirve si aparece de derecha a izquierda o de abajo arriba).
Así pues:
La string ’abc’ aparece tres veces en
L: a) primera fila, columnas 0, 1 y 2; b) tercera fila,
columnas 1, 2 y 3, y c) primera columna, filas 0, 1 y 2. De acuerdo a
los puntos especificados en P, la string
’abc’ obtiene 60 puntos en el caso a), 105 puntos en el
caso b), y 75 puntos en el caso c).
La string ’fc’ aparece sólo una vez, en la
última columna, filas 1 y 2. Aquí obtendrá 125 puntos.
Finalmente, la string ’fa’ sencillamente no
aparece.
Escribir una función max_punt(L,P) que,
dada una matriz L de letras minúsculas,
con
filas y
columnas, y otra matriz P de números
enteros positivos, también con
filas y
columnas, retorne una función.
Esta función retornada, llamémosla fret, es una función
que tiene como parámetro una string
s, y debe retornar la máxima puntuación
que puede obtener s, si s aparece en
L, o bien la string ’no’, si
s no aparece en L.
La función tiene dos matrices con las mismas dimensiones (filas y columnas) como parámetros.
La función pedida debe retornar una función de una string,
que devuelve un número entero o string ’no’.
Una vez definida la función, al probarla en el REPL de Python debería salir lo mismo que puede observar más abajo.
>>> 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 >>>