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

Dec 3, 2022, 18 tweets

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..

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