Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Resolves Program-AR/pilas-bloques-app#232
¿Qué estaba pasando 🤔?
El código que se usaba en cualquier ejercicio que tenga recoger lata es este:
pilas-bloques-exercises/src/comportamientos/RecojoLata.ts
Lines 15 to 19 in e9e2da7
Achicar implica que suceda esto:
pilas-bloques-exercises/src/comportamientos/Achicar.ts
Lines 27 to 33 in e9e2da7
Y la forma en que se fija si ya se achico es esta:
pilas-bloques-exercises/src/comportamientos/Achicar.ts
Lines 8 to 10 in e9e2da7
Esto funciona bien siempre y cuando la diferencia entre el ancho y alto de la lata sea poca (caso que asumo sucede en los demás ejercicios de Capy recogiendo latas). Pero cuando el ancho es bastante mayor al alto, lo que pasa es que al momento en que el alto es menor a 1, como el ancho todavía no lo es sigue restando el valor del contador:
Como se puede ver en la imagen, cuando el alto llega a menos de 1, pero el ancho todavía no, hace la cuenta que resulta en aprox
-1,824
(valor que queda positivo al setearse el alto).Si bien el objeto ya debería haber desaparecido, el contador sigue aumentando hasta que el ancho también quede en menor a 1, pero al momento en que debería llegar, la resta termina dando también negativa y menor a -1, haciendo que nunca se cumpla
elReceptorSeAchico
.Por esto es que se solucionaba si se le sacaba una de las filas del mapa: cambiaba el alto y el ancho de las latas lo suficiente para que no haya demasiada diferencia entre el ancho y el alto y zafara del bug.
Cambiando el método que dice si se achica para que chequee el alto además del alto, no debería pasar esto de nuevo, sin embargo habría que tener en cuenta a futuro si se vuelve a usar
Achicar
que la velocidad no sea demasiado alta para que suceda de nuevo el tema de que se reste de más. Para que no pase eso, también agregué el max(0, resta), cosa que si es negativo siempre quede en 0, haciendo que no hayan chances de que vuelva a pasar el bug.Así se ve el ejercicio con la solución que nos mandaron: