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

Dec 5, 2022, 23 tweets

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

#AdventOfCode

Hehecho un poco de limpieza pero no me gusta tener que hacer los unnest separados, ademas el step 5 sobra y se podria hacer el JOIN en el 4

Empezamos con la segunda parte.. Reutilizo la table de la primera parte

#AdventOfCode

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.

Bueno pues ya callo, digo ya cayó el tercero...

#AdventOfCode

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