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...
El octavo de #AdventOfCode parte 2 en SQL. Un poco ñapas para mi gusto pero es lo que hay!
Empezamos como siempre..
Limpiamos linea alinea y separamos x, y, altura para cada arbol usando CTEs en secuencia.
Cruzamos cada arbol con su scan a derecha, izquierda, arriba y abajo con sub-consultas correlacionadas. Hay que cambair el orden de los que devuleven para que quedan en funcioón del punto de vista. Cada resultado se agrega en un array.
#AdventOfCode 5 Supply Stacks en SQL puro (PostgreSQL)
Si te gusta el SQL lo vas a flipar (creo) , sígueme en este triste historia (por lo de "La Roja") +
Empezamos como siempre, y toca cargar el fichero de test que ya tiene tela...
Empezamos enumerando las lineas del fichero (ya en la tabla de input), quedandonos con la parte de las pilas y calculando la longitud maxima de entre todas las líneas (por si caso no eran iguales)
Quien no sepa que esto que lea mis otros hilos porque ya va siendo lo mismo todo el rato
Tan facil que no lo voy a despiezar pues creo que se entiende de un vistazo y además esta comenetado. Convierte en rangos y comprueba inclusiones entre ellos.
Bueno, de vuelta al #AdventOfCode 3 Rucksack Reorganization
Empezamos leyendo los datos con ayuda de una tabla y restricciones adecuadas..
He creado una vista con la solución y así la reuso para pasar el test y luego el fichero de entrada del desafío.
Seguidamente os explico, aquí la muestro plegada junto con el código completo.
Empiezo mapeando las prioridades ['a'..'z'] -> [1..26] y ['A'..'Z'] -> [27..52] con dos consultas sencillas y el operador UNION ALL
Este año en la encuesta de evaluación docente me van a crujir los alumnos y seguramente las prácticas de la asignatura son lo más parecido a lo que demandan cuando recién aterrizados en el curro te quejas de lo que no visteis en la universidad
Les hemos hecho currar a base de bien primero un diseño con su modelo entidad relación y su diccionario de datos justificando cada dato cada dominio cada tipo y créeme que les hemos hechi pelear cada punto y cada coma lo mismo para el modelo relacional...
después nos hemos dado un conjunto de datos con muchos defectos han tenido que cargarlos en tablas y examinarlos y razonar sobre qué transformaciones o incluso qué modificaciones a su modelo original deberían hacer ( Y efectuarlas!)