The Code Maverick (3/3 💉) Profile picture
#Codenares (Lite) #EUROBOTUAH Nullum magnum ingenium sine mixture dementia fuit

Dec 14, 2021, 12 tweets

I just completed "Passage Pathing" - Day 12 - Advent of Code 2021 adventofcode.com/2021/day/12 #AdventOfCode

Bueno al final un generador me ha salvado de hacer una burrada aunque la versión no ha quedado demasiado fea...

*SPOILERS* * SPOILERS*

#AdventOfCode #adventofCode2021

Bueno empecemos por el parser...

Preparamos un diccionario con las conexiones entre nodos (si a -> b entonces b -> a tambien) y luego llamamos a la función traverse que devuelve un generador de rutas que usamos para contabilizar la respuesta y mostrar las rutas al asuario.

Traverse empieza por generar una lista de rutas desde el nodo de partida ("start") y después itera cada una de ellas intentando aumentarlas con un nodo más, bien "end" bien uno que cumpla con las restricciones. Finalmente se emite la ruta si está completa o se almacena de nuevo.

Probamos con los diversos ejemplos de tests.

Y a continuación atacamos el puzle.

Bueno no muy contento ya que la versión recursiva me gustaba mas pero me obligaba a hacer copias profundas (deepcopy) de las rutas todo el rato. Un operador de copia profunda, yo qué se algo como =<= seria una adición al lenguaje intersante...)

En la segunda parte vamos a poder visitar alguna cueva pequeña por segunda vez. Esta vez traverse2(...) nos devuelve un stream con tuplas con la ruta y un Bool que indica si alguna cueva pequeña se visitó dos veces.

Una ligera modificación para gestionar el flag de "doble visita" en cada ruta y una claúsula adicional en el bloque condicional que permite añadir una cueva pequeña ya visita como último recurso cuando se han visitado todas las posibles.

Atacamos los puzles sin esperar muchas sorpresas gracias a los pocos cambios añadidos...

Y finalemente nos las vemos de nuevo con el puzzle. El hecho de imprimir cada ruta hace que la ejecución se dilate un poco mas de lo debido...

Bueno y acabo por Hoy (pese a que ya voy retrasado) por que habiendo llegado al ecuador del concurso me lo voy a tomar ya con mas tranquilidad...

Diviértanse!!

#AdventOfCode #adventofcode2021

Share this Scrolly Tale with your friends.

A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.

Keep scrolling