Bueno, pues estaba dejando pasar unos días para evitar spoilers y meditando si hacer en #Python o en #SQL el #AdventOfCode de este año
Así q estoy tonteando con el SQL e hice la 1ª parte del 1er día.. Como tampoco soy un fiera en SQL me lo he currado con CTEs paso a paso (YMMV)
Empecé con un pequeño script que prepara una tabla para leer la entrada. Esta vez parsear la entrada es fácil asi q no me voy a pegar un tiro en el pié al elegir SQL, no sé qué pasará después..
La tabla es temporal y se borrarrá sola al hacer el COMMIT al final del script +
Metemos los valores de test en un ficherito
y vemos que es va a ser bastante fácil leer esto..
Un comando COPY sencillito es suficiente para esta columna de valores, usaremos NULL para las filas e blanco.
Enumeramos las líneas del fichero con una función de ventana y marcamos donde acaba un grupo y empieza otro con una CASE que comprueba los NULOS.
Ahora se me ocurre que contando las marcas con una función de ventana podemos contar los elfos y asignamos a cada linea no NULA la cuenta actual. He reajustado con 1+.. para que la cuenta no empiece por 0
En el siguiente paso cuento las calorias con otra función de ventana y como no estoy agrupando uso DISTINCT para quedarme un sólo resultado por Elfo.
Finalmente usaré rank() para mostraros como puedo etiquetar el elfo por su consumo calórico, limito el listado a los 10 primeros, si no saliera en orden lo podría forzar aquí en en otra CTE.
Probamos el test y parece que lo cuadra, tal como explica la primera parte el Elfo número 4 es el que carga mas pastelitos os algo... 🫢
Ahora vamos al por el ficheros de entrada del puzzle que tambien hemos creado, simplemente cambia el comando copy y a volar!!
Lanzamos el script y obtenemos el resultado
Bueno de momento ha sido fácil, seguiré con el SQL al menos hasta que el problema supere mis habilidades con este lenguaje lo que no creo que tarde mucho, pero aquí venimos a aprender ¿No?
Y vosotros, ¿cuál es vuestro reto personal para el #AoC de este año?
Para la segunda parte hay que sumar los 3 elfos mas "cargados" básicamente como el rank no es denso y sabiendo ya la solución anterior simplemente he usado un predicado "rank < 4" aunque muchos resultados pueden entrar en este predicado, no sólo los 3 primeros)
Lo probamos para test que lo clava aunque ya sabéis que es una chapuza. Chicos que me seguís en clase no hagáis esto en casa.
Y lo probamos para el fichero general..
Bueno pues otra estrella para la saca, aunque no sea nada glamuroso el tema..
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!)