FedericoFuentesWeber / TPs-PdeP-2018

0 stars 0 forks source link

Máximo / mínimo de un conjunto #20

Closed sanuzzi closed 5 years ago

sanuzzi commented 6 years ago

Tienen esto:

billeterasMayoresADespuesDeUnBloque n bloque = filter (billeteraSegunCriterio (>=n) bloque)
billeterasMenoresADespuesDeUnBloque n bloque = filter (billeteraSegunCriterio (<=n) bloque)

Y esto:

usuarioMasAdineradoDespuesDeUnBloque bloque usuarios = billeterasMayoresADespuesDeUnBloque (billetera (head usuarios)) bloque usuarios
usuarioMenosAdineradoDespuesDeUnBloque bloque usuarios = billeterasMenoresADespuesDeUnBloque (billetera (head usuarios)) bloque usuarios

Y esto:

peorBloque usuario [] = []
peorBloque usuario (bloqueCabeza:[]) = bloqueCabeza
peorBloque usuario (bloqueCabeza:bloqueCola)
 |(billetera.aplicarUsuarioBloque usuario) bloqueCabeza <= (billetera. aplicarUsuarioBloque usuario) (head bloqueCola) = bloqueCabeza
 |otherwise = peorBloque usuario bloqueCola

En los 3 casos (más adinerado, menos adinerado, y peor bloque), lo que están haciendo es buscar el mejor elemento según un criterio. El criterio puede ser:

En los 3 casos, había que usar una lógica muy muy similar, pero están escribiendo el código 3 veces (2 filters y una recursividad).

Además, en ningún caso cumple la consigna: Están devolviendo una lista, cuando en verdad debían devolver el elemento que cumpla con ser el mejor según un criterio. Eso los fuerza a hacer un head después.

También fíjense que lo del peorBloque funciona con listas vacías, y eso es medio raro. Debería romperse, ya que encontrar el peor entre ningún elemento, no tiene mucho sentido.

Por último, piensen más en la herramienta idónea para resolver un problema: Si tienen que buscar un elemento que cumpla algo, partan de find. Luego piensen en el criterio. Si el criterio es ser el mejor de todos los de la lista, suena mucho a all. Otra forma un poco más algorítmica es ir recorriendo la lista de a pares e ir quedándose con el mejor de cada par y seguir avanzando, que puede hacerse con fold.

Redondeando, respeten más la consigna, piensen más en qué herramienta resuelve mejor el problema, y no repitan código / lógica.