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
Después enumero las mochilas convierto en un array de chars cada linea de items correspondiente y precalculo el número de elementos de cada una.
Ahora separo los ítems para los contendores 1 y 2 para cada array de ítems de cada mochila.
Ahora hago el cartesiano: {M x C1 x C2} donde C1 y C2 son los contenedores de cada mochila M. Intenté unnest(c1,c2) pero PG me dice que unnest(text[ ], text[ ]) no está definida!! (text[ ] :: anyarray???)
Hago la auto reunión y me quedo con las tuplas en las que hay un elemento compartido (es posible que esto me sobre) y lo reuno con las prioridades eliminando duplicados
con todas estas CTEs en su sitio sólo queda sumar las proridades de los elementos comunes.
Ejecutamos el script y vemos que el test sale correcto así que no vamos a la página a ver si el fichero completo tambien rula..
En fin, aun no estoy contento con mi estilo pero voy sacando el tema..
Creo una vista con las CTEs necesarias para la consulta, empezando por la lista de mapeos de prioridades tal como hicimos en la parte1.
Leemos de 3 en 3: Convierto en array los items y genero una numeracion de líneas temporal y haciendo una triple reunión en base al cartesiano. Finalmente jugando un poco con la aritmética (mod 3) agrupo de 3 en 3 las tuplas.
Ahora una triple "explosión cartesiana" de unnest de cada lista de items se reune de forma natural mediante el número de linea. Mediante una WHERE nos quedamos con los items compartidos en cada lista.
Finalmente reunimos los resultados con la tabla de prioridades para hacer el mapeo.
Con todas las CTEs en su lugar simplemente tenemos que sumar los scores resultantes.
Bien leamos primero el fichero de test y después lo hacemos con el fichero de input...
Parece que la salida del test era buena así que comprobamos si la salida del fichero completo es tambien correcta.
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.
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!)