[ Foro de Python ]
COMO RESUELVO ESTA PR?CTICA , NECESITO AYUDA ANTES DEL miercoles 20/12/2017 A LAS 00:00h
Dada una matriz cuadrada de orden n, se pueden formar secuencias de elementos contiguos en **tres direcciones**: Horizontal, vertical y diagonal y en **ocho sentidos** distintos, respectivamente:
1. Horizontal
1. Izquierda-derecha.
2. Derecha-izquierda.
2. Vertical
1. Arriba-abajo.
2. Abajo-arriba.
3. Diagonal
1. Izquierda-derecha y Arriba-abajo.
2. Izquierda-derecha y Abajo-arriba.
3. Derecha-izquierda y Arriba-abajo.
4. Derecha-izquierda y Abajo-arriba.
Como ejemplo, consideremos la siguiente matriz M de dimensi?n cinco:
$$ M_{1} =
\begin{matrix}
6 & 2 & 9 & 5 & 9 \\
2 & 9 & 6 & 7 & 8 \\
4 & 2 & 8 & 8 & 7 \\
2 & 2 & 7 & 4 & 2 \\
2 & 2 & 3 & 2 & 2
\end{matrix} $$
Podremos formar n?meros de cinco o menos d?gitos, de los cuales por definici?n, unos ser?n pares y otros impares.
En el caso de la matriz M, los cuatro n?meros de cinco d?gitos m?s grandes de toda la matriz (obviamente son aquellos que empiezan por 9) son los que se encuentran en las siguientes posiciones, resultantes de buscar en todas las direcciones y sentidos mencionados anteriormente:
$$
\begin{align}
n_{1} = a_{0,4}a_{1,4}a_{2,4}a_{3,4}a_{4,4} = 98722\\
n_{2} = a_{0,4}a_{1,3}a_{2,2}a_{3,1}a_{4,0} = 97822\\
n_{3} = a_{0,2}a_{1,2}a_{2,2}a_{3,2}a_{4,2} = 96873\\
n_{4} = a_{0,2}a_{1,2}a_{2,2}a_{3,2}a_{4,2} = 95926
\end{align}
$$
De los n?meros obtenidos, $n_{1}, n_{2}, n_{4}$ son pares mientras que $n_{3}$ es impar, por lo tanto el mayor n?mero impar que puedo formar a partir de posiciones contiguas de la matriz es $n_{3}$ y el mayor n?mero par es $n_{1}$.
## Enunciado
Se pide implementar en c?digo la funci?n encuentra_maximo (se proporciona una plantilla en la celda de respuesta) que recibe un ?nico argumento "sopa" y devuelve **el mayor n?mero entero impar** encontrado en la matriz. El formato empleado se puede ver en el siguiente ejemplo, en el que se codifica la matriz M vista anteriormente y se pasa a dicha funci?n, que devuelve la soluci?n (El ejemplo imprime por pantalla 96873).
```python
sopa ='''62959\n29678\n42887\n22742\n22322'''
print(encuentra_maximo(sopa))
sopa ='''62959\n29678\n42887\n22742\n22322'''
print(encuentra_maximo(sopa))
```
Es importante considerar aquellos casos en los que la longitud del resultado no coincide con la dimensi?n de la matriz. Veamos otro ejemplo con una matriz $M_{2}$ resultante de modificar la empleada en el ejemplo anterior.
$$ M_{2} =
\begin{matrix}
6 & 2 & 6 & 6 & 8 \\
2 & 9 & 6 & 7 & 8 \\
4 & 2 & 8 & 8 & 6 \\
2 & 2 & 7 & 4 & 2 \\
2 & 2 & 4 & 2 & 2
\end{matrix} $$
Al variar algunos d?gitos no es posible encontrar un n?mero impar de cinco cifras, as? que la soluci?n estar?a en los de cuatro. Es f?cil imaginar situaciones an?logas en las que ser?a necesario aumentar la b?squeda a?n m?s, a n?meros de tres e incluso dos cifras, que tu c?digo deber? resolver tambi?n.
*NOTA: Para terminar la pr?ctica, explica tu soluci?n en la ?ltima usando celda de respuesta de texto*
## Consideraciones y consejos
1. Tu soluci?n funcionara para cualquier matriz M de entrada de dimensi?n $n\geq2$ tal que $ \forall a_{i,j} \in M, a_{i,j} \geq 0$
2. Para aprobar la pr?ctica, es necesario que tu c?digo al menos encuentre una soluci?n considerando filas y columnas en todas las direcciones y sentidos posibles.
3. **Cuidado** con los ceros al principio: $12340 > 04321 $
4. Si no existen n?meros impares en toda la matriz, la funci?n *encuentra_maximo* devolver? -1.
5. Se considerar? positivamente la claridad, limpieza y simplicidad del c?digo. Cuanto m?s concisa, elegante y r?pida sea tu soluci?n, mejor.
10. Como pista, en la casilla de respuesta te he dejado las signaturas de algunas funciones que considero que son ?tiles para resolver el problema. Si no sabes por d?nde empezar, piensa en qu? casos llamar?as a estas funciones. Puedes (y debes) declarar t? otras funciones que consideres oportunas para la correcta resoluci?n de la pr?ctica. **El ?nico requisito es que exista una funci?n llamada encuentra_maximo, que reciba un argumento y devuelva el resultado como se ha explicado**.
11. Las soluciones que a?adan **comentarios** al c?digo (Usando el caracter almohadilla #) ser?n evaluadas positivamente.
## Cuidado
1. **NO** uses la funci?n de entrada por teclado *input*. Puedes usar *print* para imprimir mensajes de debug durante la realizaci?n de la pr?ctica, pero aseg?rate de eliminarlos cuando vayas entregarla.
3. No se evaluar?n:
1. Soluciones que den error.
2. Soluciones que empleen listas, matrices, objetos o cualquier otra caracter?stica del lenguaje.
3. Soluciones que empleen la sentencia **import** para hacer uso de paquetes est?ndar o de terceros.
4. **El l?mite de entrega estricto es el 20 de Diciembre de 2017 a las 0:00 horas.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)