Hormigas

Introducción:

Las hormigas tienen habilidades increíbles: pueden levantar 5.000 veces su peso y recurrir de forma natural a la heurística para resolver sus problemas. Esta kata rinde un pequeño homenaje a nuestras pequeñas compañeras en la observación de su comportamiento emergente.

La idea es construir una aplicación que tenga una hormiga corriendo dentro de una cuadrícula, a la cual le daremos ciertas instrucciones para observar su comportamiento. Esto también es conocido como ''La Hormiga de Langton''.

Teniendo en cuenta las reglas:

  • En un cuadrado blanco, gira 90° en sentido horario (R), cambia el color del cuadrado y avanza una unidad.
  • En un cuadrado negro, gira 90° en sentido antihorario (L), cambia el color del cuadrado y avanza una unidad.

    Así se deberían ver los primeros 200 pasos de la hormiga si sigue las indicaciones anteriormente mencionadas (utilizando la notación 'RL'):

LangtonsAntAnimated
Reglas
  • La secuencia anterior debe tener al menos 2 caracteres (e.g 'RL'), que se ejecutarán en bucle durante el número de pasos definido.
  • Al inicio, todas las casillas serán de color blanco.
  • La cuadrícula debe tener un tamaño impar para que la hormiga pueda estar en el centro.
  • La cuadrícula debe mostrarse después de cada paso para que podamos observarla.
  • Debemos ser capaces de detener el código después de 'x' iteraciones.


Versión Difícil 

Para hacer las cosas más interesantes, podemos cambiar la cantidad de colores que utilizamos. Los colores se modifican de forma cíclica. Para cada uno de los colores sucesivos se utiliza un sencillo esquema de nomenclatura: debemos usar la letra "L" o "R" para indicar si se debe girar a la izquierda o a la derecha. En este esquema de nomenclatura, la hormiga de Langton tiene el nombre de "RL".

Si decides implementar una cuadrícula hexagonal, por ejemplo, tendrás que considerar las siguientes anotaciones:

  • Con la 'U' giras 180°
  • Con 'R1' giras 60° en sentido horario
  • Con 'R2' giras 120° en sentido horario
  • Con 'L1' giras 60° en sentido antihorario
  • Con'L2'giras 120° en sentido antihorario

    Esto te permitirá crear visualizaciones interesantes, como por ejemplo R1R2NUR2R1L2:

CA50338_animation