Barridos con Karel

Interpretemos como barrido el hecho de recorrer todos los espacios posibles de una determinada área. Esto resulta especialmente útil en Karel, pues la solución a muchos problemas lo requiere. Sin embargo aunque hay muchísimas formas de realizar un barrido nuestro deber es encontrar la manera óptima de hacerlo.

Problema práctico

Imagina que Karel se encuentra en la esquina inferior izquierda de un gran espacio cerrado delimitado por cuatro paredes y en cada espacio de ese cuadro hay una cantidad desconocida de zumbadores. La tarea de Karel es recoger todos los zumbadores, para después apagarse.

Como es lógico, tenemos que hacer que Karel pase por todos los espacios de esa área a la vez que tomamos el zumbador sobre el que estemos. A la acción de recorrer todos los espacios es a la que estamos llamando barrido. Así que buscaremos la manera óptima de hacerlo, donde tengamos que escribir menos y Karel lo haga lo más rápido posible.

Maneras de hacer el barrido

Consideremos las siguientes maneras de hacer un barrido

La primera como en zig zag, o también llamada comúnmente “de serpiente”.

Barrido de serpiente

Otra forma sería hacerlo por columnas, es decir, subir y bajar una columna y luego pasarse a la siguiente y continuar.

Barrido por columnas

Otra manera puede ser en espiral, haciendo un recorrido como sigue.

Barrido en espiral

Todas los métodos anteriores cumplirían con recorrer cada espacio de un área cuadrada determinada, sin embargo, tenemos que analizar cuál es la mejor manera de hacerlo. Recuerda que no sólo buscamos resolver problemas, sino hacerlo de manera óptima.

Analizando cada método

Serpiente

Para el método de serpiente, las cosas que tendríamos que considerar son las siguientes (considerando que Karel inicia en la esquina inferior izquierda orientado al norte como en los ejemplos):

Como puedes ver, hay que ir girando alternadamente a la izquierda y derecha y revisar en cada giro que el frente esté libre para poder continuar con el barrido.

Columnas

Para el método por columnas y partiendo de las mismas circunstancias que el ejemplo anterior, tendríamos que considerar lo que sigue.

Aquí son menos pasos y no tenemos que estar alternando direcciones de giros, por lo que los chequeos de final son menos y más concisos, sin embargo, Karel recorre dos veces cada columna, por lo que podría parecer que estamos haciendo trabajo de más.

Espiral

Para el método en espiral y de nuevo, partiendo con de las circunstancias anteriores, existen varias maneras de hacerlo, sin embargo tomaremos una de las más prácticas y sencillas.

Podrán parecer menos pasos, sin embargo, este método sería mucho más complicado, si por ejemplo, el área a limpiar de zumbadores tiene huecos, o al revés, si es un campo a rellenar y ya hay zumbadores en algunos espacios. Por eso mismo, el final tendría que ser distinto según cada caso y las consideraciones variarían de complejidad también.

El método óptimo

Consideremos como el algoritmo óptimo, aquel que necesita de poco esfuerzo y líneas de código en escribirse, es fácil de entender, modificar y corregir y además tiene una ejecución bien controlada (que a cada momento sepamos qué está pasando). Otra cosa importante, es el tiempo que se tarda Karel en realizar la ejecución, recordemos que hacer chequeos también le toma un tiempo (visto a gran escala).

Podemos verlo en las descripciones generales, el algoritmo más sencillo de implementar es el método por columna, su código es más corto, rápido y fácil de escribir, se modifica fácilmente y además es muy controlado. Aunque recorremos doble las columnas, es una desventaja que vale la pena, pues por lo general el tiempo de ejecución extra que necesitamos siempre está disponible, aún con el caso más grande de espacio, es difícil que nos falte tiempo. Por lo que podemos decir que es la mejor opción.

El código

En base a la descripción general que hicimos al inicio, podemos llegar al siguiente código:

PascalJava

No olvides probar y asegurarte de entender el código anterior, así como implementar los otros dos barridos mencionados, puedes sacarles provecho en algunos casos, así que es también muy útil entenderlos y manejarlos.

Cita esta página

Include Poetry - Code. (2020, 4 de enero). Barridos con Karel. Obtenido de https://www.include-poetry.com/Code/Otros-temas/Karel/Barridos/

Algoritmo

/* Comentarios */