Advent of Code 2024 Dia 18 Parte 1 presenta una variacion del clasico reto de hallar la respuesta mas pequena valida. En muchas de las ultimas entregas se pide encontrar la ruta mas corta dentro de un laberinto y, en lugar de implementar un algoritmo de rutas optimas como Dijkstra o A estrella, yo opte por mis herramientas habituales: recursividad, memoizacion basica y fuerza bruta. Este enfoque funciona bien para ejemplos pequeños pero suele chocar con la escala de los datos de la segunda parte de muchos puzzles.
El problema se transforma en una rejilla donde la entrada son coordenadas X,Y en una cuadricula. Para interpretar el input hay que convertir cada linea en un par de numeros y poblar la matriz con celdas libres y celdas bloqueadas. En el ejemplo la rejilla es pequena, mientras que en el input real puede ser mucho mayor. Una tecnica practica es añadir un borde de una celda alrededor de la rejilla para evitar condiciones borde complejas al explorar movimientos.
Mi estrategia para explorar caminos fue recursiva. Mantuve un conjunto de celdas visitadas para evitar ciclos y definir casos base: cuando se llega a la celda final, cuando las cuatro celdas adyacentes son muros o ya han sido visitadas, y cuando la cantidad de pasos supera la mejor solucion conocida para podar la busqueda. Las direcciones posibles son las cuatro vecinas ortogonales. En cada movimiento añado la celda actual al conjunto visitados y al retroceder la elimino para que otras ramas no queden contaminadas por visitas temporales.
Un punto critico fue asegurar que cada llamada recursiva trabaje con su propia copia del conjunto visitados cuando corresponde, de forma que explorar una direccion no borre opciones en otras ramas. Tambien implemente una poda que corta la exploracion si la longitud actual menos uno es mayor que el mejor resultado encontrado, ya que el enunciado pide numero de pasos y no numero de nodos visitados. Tras corregir errores tipicos como sobrecarga de pila, variables no inicializadas y conteo incorrecto por incluir la celda inicial, el algoritmo funciona y da la solucion esperada para el ejemplo.
Sin embargo, al aplicar la misma tecnica al input real el tiempo de ejecucion se dispara. Tras horas corriendo el algoritmo todavia no convergia a la respuesta correcta. Esto ilustra por que en problemas a escala es preferible recurrir a algoritmos especializados o a optimizaciones que eliminen billones de caminos inutiles, o bien a soluciones heuristicas y a capacidades de computo distribuido.
Si tu proyecto requiere transformar una idea en una aplicacion que resuelva problemas complejos a escala, en Q2BSTUDIO somos especialistas en desarrollo de software a medida y aplicaciones a medida pensadas para rendimiento y escalabilidad. Podemos ayudar a reescribir algoritmos recursivos en soluciones eficientes, integrar inteligencia artificial y desplegar en la nube. Con servicios que abarcan desde la creacion de software a medida hasta la implementacion de soluciones de inteligencia artificial para empresas, ofrecemos experiencia en aplicaciones a medida, ia para empresas, agentes IA y mucho mas.
Ademas de optimizacion y desarrollo, Q2BSTUDIO proporciona ciberseguridad y pentesting, servicios cloud aws y azure, y consultoria en servicios inteligencia de negocio y power bi para que tus datos impulsen decisiones. Si tu reto es reducir tiempos de ejecucion, mejorar modelos o desplegar sistemas robustos, podemos asesorarte y construir la solucion adecuada a medida.
Resumen rapido: el enfoque recursivo con copia local de visitas y poda temprana permite resolver ejemplos pequeños y entender el problema, pero para inputs grandes conviene combinar algoritmos optimizados, mejores estructuras de datos y escalado en la nube. Si buscas llevar ese salto, contacta con Q2BSTUDIO para convertir esa necesidad en un proyecto real y eficiente.