Advent of Code 2020

¿Dónde me apunto?

https://adventofcode.com/

Normas

  • Cada día se desbloquea un problema nuevo
  • Programas en el lenguaje que te da la gana
  • Utilizas las técnicas que te da la gana
  • Le dedicas el tiempo que te da la gana
  • Cada problema tiene una caja de texto para meter la solución (suelen ser números o alguna cadena de texto pequeña)

Leaderboard privado para el pique sano

NSFW

Las respuestas se postean en Spoiler + code

LLoid

joer pues comprobando que cada campo de los 7 obligatorios aparece sólo 1 vez y que tiene que haber 7 campos válidos (es decir, que cada campo válido aparece 1 y sólo 1 vez) sigue sin funcionarme, me saca el mismo valor que antes :(

spoiler
JonaN

Hecho día 4, ha costado más por un error estúpido:

Día 4, Python poco elegante
Traber

#360 Pregunta de imbécil redondo, ¿qué pasa con int(x) si x es "#ff0102" o "bzd"? Lo digo porque en ese han sido cabrones con los inputs, cosas que al parsear lanzan excepciones te van a petar si no las manejas xd

2 respuestas
B

#363 En python se rompe, como mucho con int(x, 16) puedes parsear enteros de la forma 0x000.... pero #ff0102 no es directamente parseable que yo sepa.

1 respuesta
Traber

#364 Pues que vaya cambiando eso porque le va a petar de todos los colores xD.

Yo he hecho en dos partes el parseo y la validación; si el parseo es correcto asigno el valor, y luego valido en función de las políticas del ejercicio. Obviamente, si no ha parseado y el campo es nulo, no continúa y la validación falla.

Fyn4r

No estoy orgulloso, sobre todo de la lectura del input, pero funciona.
Algún día aprenderé a usar expresiones regulares sin babearme encima xD

Dejo el enlace a github para escarnio público
https://github.com/Fynardo/AoC2k20/blob/main/day4/passport.py

P.D no os quejaréis de que no intento hcerlo funcional xD

2 respuestas
aren-pulid0

#366 Joder, la verdad que haces un código de 10 cabronazo, ojala algun día como tú

r2d2rigo

#366 como lo puedes tener bien si tu regex para el hair color es

^[a-z0-9]{6}$

Cuando deberia ser

^[a-f0-9]{6}$

Menuda suerte teneis algunos con los inputs.

3 1 respuesta
Fyn4r

#368 Bien visto xD

r2d2rigo

Dejo por aqui mi solucion (en C# como no), nada elegante pero aqui venimos a resolver problemas 🌚

https://github.com/r2d2rigo/advent-of-code-2020/blob/main/src/Day4/Program.cs

MTX_Anubis

a ver si hoy tengo hueco para hacer los de los días 3 y 4 que entre curro y los niños estoy hasta arriba y no le he podido dedicar nada xD

y cambio el lenguaje a elixir que hemos venido a jugar.

1 1 respuesta
Traber

Yo solo dejo mi estructura de cómo ha quedado mi respuesta, para que veáis que no miento cuando digo que he ido al Overkill xD

1 respuesta
QuitCat

#372 Estas de vacaciones supongo .. jaja

1 respuesta
Traber

#373 Que va, hasta el 25 nada, pero estas cosas me encantan. Y venga va, pongo aquí todo el chorizo y a tomar por culo xd.

Structs.cs
Passport.cs
PassportParser.cs
Program.cs

Edit: Acabo de ver que tengo hasta el logging puesto porque me volví loco con el segundo resultado, para que veáis lo cabrones que han sido con el input xd.

2 respuestas
desu

#371 Espero que con tu toque paralelices el código, quien saca el elixir y no mete actores es un parguela.

r2d2rigo

#374 joder colega vaya dosis de enterprise fizzbuzz.

1
JuAn4k4

He leído el enunciado del 1, y estoy por hacerlo hacky, espero no tener que rehacerlo para la fase 2. A ver que os parece:

Hacer el split, ignorar el cid, y hacer un count.

Edit: Viendo las soluciones de la 2 ya veo que hay que validar de verdad, que puta mierda de ejercicio, no había nada más aburrido? Srsly?

1 1 respuesta
eondev

#374 te faltan factories pero 10/10.

2 1 respuesta
r2d2rigo

#377 no me seas cowboy developer y aprende como se hacen las cosas en el mundo real, copon.

2 respuestas
AikonCWD

#379 Yo solo espero que en el mundo real, los inputs que te pasan son json, xml, csv o cualquier otra fuente de datos bien estructurada.

1
Traber

#378 En mi putísima vida he necesitado una mierda de factory y eso que tengo una librería hecha de Query Building para C# con soporte para MySQL, Elasticsearch, MSSQL y SQLite usando Generics con CRTP que seguro que algún lumbrera javero habría hecho con las fabriquitas de los huevos, así que mucho menos voy a usar eso aquí xd.

Es más, para que veas el ejemplo de recursividad que hay en dicha librería:

public class Builder : Builder<Builder>

Y no, no es broma xD.

1
NeV3rKilL

#363 Debí tener suerte con el input porque eso no me petó.

Me tiré como 30 minutos buscando alguna otra cosa, y al final se me había olvidado controlar que el PID tuviese 9 dígitos.

Tuve que sacar cada campo en columna y formatearlo con fuente monospace para identificar cosas raras y así fue como identifiqué el error.

Me daba 2 pasaportes buenos de más de los que en realidad eran.

B

Mi lógica me dice que está bien, pero no, no lo está...

spoiler
2 respuestas
B

#383 Juraría que el problema está en:

if fields[0] == "cid":

Ahí sólo compruebas la primera posición del array, ¿pero y si "cid" no está el primero?

2 respuestas
B

#384 es la primera posición de "campo:valor" para saber si es cid o no, si cid está en ese pasaporte, hago break y salgo de recorrer los campos de ese pasaporte porque ya sé que el que falta es otro y ya no está validado, pero cada campo:valor está en p, no en fields. Entonces se supone que compruebo todos campos (p) de cada pasaporte (pasaportes), y cada campo p tiene sus dos fields (nombre:valor) y compruebo el 0 que es el nombre.

2 respuestas
Unrack

#385 Revisa el parseo. El código que se encarga del check por cada pasaporte me parece que funciona (un poco engorroso eso sí)

Edit: Olvida. Desde el móvil no se ve bien los bloques e identación.

BeheritSp

#383 Si lo entiendo bien, estas checkeando el passport cada linea que lees (que va creciendo con cada linea leida hasta que encuentras una linea vacia), y creo que deberías hacer el chequeo una vez tienes todo el pasaporte listo.

Imagino que te esta pillando algun caso donde len(passport) == 8 cuando esta completo, pero como vas leyendo linea a linea, justo cuando el len(passport) == 7 aun no tiene cid (bastante mala suerte esto) y te lo pilla como correcto. Entonces te pillaria dos veces como correcto el mismo passport, cuando su len es 7 y cuando su len es 8.

1 respuesta
Ranthas

Bueno, resuelto el día 4 sin mucho problema.

La primera parte la he resuelto sin más, directamente tratando el string, pero la segunda parte ya me ha podido el gen masillero y lo he hecho a lo grande, con sus pojos y demás mierda.

1
B

#385 Me ha despistado los nombres que usabas para las cosas, perdona. Te dejo la solución que ha hecho mi mujer esta mañana (está aprendiendo) para solucionar esa parte.

spoiler
B

#387 luego reviso que estoy en móvil, pero creo que es fallo de la indentación de MV. Aún así cuando pueda reviso a ver..