Hoy no doy para mas, asi que he podido hacer la 1º parte del #AoC 3 "Binary diagnostics" pero me temo que voy a a ir perdiendo terreno con la cabeza de pelotón 😓

Vamos allá..
*SPOILERS* *SPOILERS*

#AOC201 #AdventOfCode2021
El parser, aqui he añadido una directiva de DoctTEST para poder chequear excepciones de Parsy +info:docs.python.org/3/library/doct…

Un parser muy sencillo claro.. +
Una vez leido calculamos cuantos códigos hay u que longitud tienen estos para crear una lista de contadores de bits, y los códigos gamma y epsilon de la longitud adecuada, fijaod en la primera parte de la función.. +
Contamos cuantos bits a "1" hay en los string de cada código. Una vez contados por cada valor del contador, si supera el 50% de los valores que hemos leido en la lista, el correspondinete bit de gamma va a "1" sino va a "0". Epsilon sigue el mismo razonamiento pero al revés. +
Finalmente hacemos un join convirtiendo los valores de gamma y epsilon (son listas) en un string y parseamos el string como un entero en base 2.
Calculamos la solución y probamos tanto el dataset de prueba como el puzzle propiamente dicho..
Easy cake. 5 estrellitas y aqui lo dejo hasta otro día...

Diviertanse!

#AOC2021 #AdventOfCode2021
"Todos estos momentos se per.."

No! no! Los teneis aquí guardados:

twitter.com/i/events/14661…
Seguimos con la segunda parte. Primero he extraido el código de calculo de valores mayoritarios y la he ampliado con empates y un test..
Con esta funcion atacamos la busqueda del valor del oxígeno siguiendo la reglas al pie de la letra.. La busqueda recursiva y las comprensiones de listas se presta a codificar esta función de manera muy rápida y directa.
Y sí, he usado un print para sacar la traza y asegurame +
De igual manera atacamos la busqueda del CO2 teniendo en cuenta que calculamos valores mayoritarios en vez de minoritarios asi que hay que cambiar algún == por un !=
Por lo demas igual a su hermana. (las hice por separado para que se vea mas claro..)
Ya sólo queda armar el cuerpo de la segunda parte que no tienen mucho mas que rascar, buscar ambos valores , multiplicar y notificar al usuario. Si recordais el main del módulo captura todas las excepciones posibles asi que poco mas que hacer aquí..
Probamos con los datos de test y viendo que va bien atacamos el puzzle..
Bueno pues hemos terminado... Le he dado 1000 vueltas antes de escribir nada para no cansarme demasiado por algo mi motto es "solvitur ambulando"

Diviértanse!!

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with The Code Maverick

The Code Maverick Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @maverick_code

7 Dec
La 1º parte del Lanterfish ha sido facilisima (debe ser la segunda la puñetera)

Veamos..

*SPOILERS* *SPOILERS*

#adventodcode #AdventOfCode2021
El parser es mas bien directo ya que el formato es trivial a estas alturas "2,3,4,5,2" 🧐 Image
el ciclo de vida del "lanterfish" es cuestion de entenderlo bien.. una vez hecho la implementacion es trivial. El pez evoluciona estados y opcionalmente tienen un vástago... Image
Read 14 tweets
7 Dec
Bueno pues "Hydrothermal venture" no ha resultado muy complicado, me temo que voy a flipar cuando llegue al 6...

Os cuento...

*SPOILERS* *SPOILERS

#AdventOfCode2021 #adventofcode
El parser de parsy se come la lista de segmentos de una tacada, aqui nada que ver salvo que quieras aprender un poco de Parsy.
Convierto los segmentos x0, y0 -> x1, y1 a (x0, y0, x1, y1) Image
filtramos los segmentos vert. y horiz. calculamos el grid necesario y dibujamos cada segmento en el grid (expandiendo horizontal o verticalmente en puntos (x, y) y anotando 1 en el grid por cada paso.
Finalmente contamos los solapamientos.
(código sin cometarios que me canso). Image
Read 15 tweets
6 Dec
Bueno ya me levanté de la cama y me pasé el Gigant Squid part1

pues vamos allá...

*SPOILERS* *SPOILERS*

#adventofcode #AdventOfCode2021
El parser, este es una bestia de parser se come el fichero entero y digiere la lista de números y todas las tarjetas de juego que se encuentre.. Que mas puedo decir, ejercito casi todo lo que tienen Parsy y como dice @FabioskySG "Hard work pays off" + Image
Ahora os enseñaré el cuerpo de la parte 1. Construyo instancias de la clase board y luego chequeo todos los números hasta que una de ellas devuelve "Bingo!" tras lo cual obtengo el score y ya hemos terminado. Sencillo gracias a q el trabajo esta en los métodos de la clase Board.+ Image
Read 19 tweets
5 Dec
El #AoC numero 2.

Os lo cuento brevemente, y la brevedad creedme ha sido una bendición porque no puedo teclear demasiado tiempo..

Vamos allá!

*SPOILERS* *SPOILERS*

#AdventOfCode #AOC2021
El parser se asegura que leemos los comandos correctamente y que no hay nada mas. Sanitizando la entrada me ahorro muchos chequeos en otras partes.. Un par de test unitarios muy básicos y a correr
Si las lambdas fueran mas expresivas me habia ahorrado las subfunciones (quizás con una namedtuple...). por lo demás es la clasica propagación del estado en bucle +
Read 9 tweets
4 Dec
Bueno pues Hoy he hecho un pequeño esfuerzo por teclear y he resuelto el AoC Sonar Sweep parte 1.
Es muy facil asi que he tratado de ser un poco exótico y ahorrarme teclear mucho que apenas he podido aguantar la parte 1

*SPOILERS* *SPOILERS

#AoC2021 #Python
Bueno agregué a un workspace las rutinas del A0C2020 por si puedo ahorrarme esfuerzo (aún ando jodido) El main funciona independiente de cuantos modulos despliegues en el directorio de challenges +
Lo primero que el puzle necesita es un swich para leer el fichero y un comando para lanzar la parte1 y la parte2 por separado. Para eso el módulo registra un subparser que se encarga de esos detalles.. +
Read 13 tweets
1 Dec
No expliqué el invento!! ¿Funcionará?


Bueno dadme el beneficio de la duda y trato de explicaros que creo ocurre en este snippet de código..

Vamos allá!! +

#AoC2021
Veamos :
part1 :: [Int] -> Int
part1 ns = length $ filter (>0) $ zipwith (-) ns' ns
where ns’ = tail ns
ns' = tail ns, es la lista "ns" menos su primer elemto, es decir empieza por el segundo. Esto lo uso para restarle el segundo al primero con: zipWith (-) ns' ns que une en cremallera ns' y ns aplicado la resta a cada par de elementos es decir: 2º - 1º, 3º - 2º.. etc..
Read 11 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(