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

BeheritSp

Bastante coñazo los checks de la parte 2, ganas de ver si alguien lo ha hecho más clean.

Day4 en python:

spoiler
1 respuesta
Traber

#331 Mi solución desde luego clean no es, uso clases genéricas, herencia... Vamos, que me he pasado xd

LLoid

primera parte en kotlin:

spoiler
B

Yo lo he hecho con un hashmap de funciones. He usado regex para separar y comprobar.

Hay cosas que viendo el input se podian comprobar casteando a int y ya, pero me daban paranoias como que fueran tan cabrones de poner cosas en hexadecimal que tuvieran un valor valido y similares, por lo que he perdido algo de tiempo.

spoiler
1 1 respuesta
pineda
spoiler
Unrack
spoiler
1
MartiONE
spoiler
1 1 respuesta
QuitCat

La gracia de hoy son las expresiones regulares y poco mas

spoiler
2 respuestas
Unrack

#338 expresiones que... :sweat_smile:

desu

Durisimo hoy. Llevo 2h. Estoy implementando una especie de partition-by a mano reursivo. No em sale de ninguna manera xd he hecho 3 metodos distintos. muy duro. lo quiero sacar en 2 pasadas.

1 respuesta
eondev

#340 se te complica salir del fizzbuzz?

1 1 respuesta
desu

#341 Si es muy dificil re implementar esto como lo estoy haciendo y hacerlo optimo. Me esta costando sin hacerlo mutable. Que podria hacerlo en dos bucles pero no seria mi objetivo.

xdddd vaya autentica tonteria de pregunta.

la ultima version que tengo wip

spoiler

no me se el patron funcional para tener un doble reduce y no quiero hacer un peek/side effect. tendre que escribir las lambdas al final y reducirlas ya veras xd

1 respuesta
B

#342 Nunca he entendido a la gente que os da por complicaros la vida a estos niveles con cualquier chorrada, la verdad.

1 respuesta
Traber

#338 No he usado ni una hulio

1 respuesta
QuitCat

#344 Por lo que he visto no han sido muy cabrones en los casos de prueba para las validaciones jaja

1 respuesta
B

#345 Yo las he usado porque no me ha dado por mirar el input por encima, y me esperaba auténticas capulladas como byr: 001994, y demás xD

1 respuesta
QuitCat

#346 Efectivamente, yo me he dado cuenta porque alguna regexp la tenía mal y aún así ha dado todo OK

desu

#343 bueno si supiese programar y como se hace no seria complicarse la vida y lo habría sacado en 5 minutos. No es el caso. Si hoy le dedico un par de horas la próxima vez serán un par de minutos.

Lo habia resuelto pero tenia un bug y por eso lo he vuelto a hacer. Mi algoritmo es muy sencillo:

spoiler
1 respuesta
Unrack

#348 Já. Sobrestimas la memoria.

1
Fyn4r

Llevo un rato con el primero y estoy convencido de que debería funcionar pero da de más al parecer :_

2 respuestas
NeV3rKilL

#350 A mi me daba de menos porque no metía el último valor en la lista de pasaportes.

1 1 respuesta
BeheritSp

Refactorizo mis checks en #331, inspirado por #334 y #337. Mi codigo ya no me da tanta grima.

spoiler
1
Axtrix

Parte 1.

Un poquillo guaro y poco optimo, pero es lo que hya, luego me pondre con el regex

spoiler
QuitCat

#350 Prueba siempre primero con el caso de prueba pequeño del propio ejercicio, que suele servir para ver los errores básicos

1
Fyn4r

Era lo de #351, que el IDE me muestra una línea nueva al final (es lo que uso como "trigger" para añadir el nuevo pasaporte) pero en realidad al leer las líneas no está y nunca se inserta
Soy oficialmente el pato retrasado

LLoid

llevo un rato dándole vueltas a la segunda parte y no encuentro en qué me falla. la web dice que mi valor es demasiado alto, así que imagino que alguno de mis regex es demasiado laxo, pero no encuentro el error por ninguna parte:

spoiler
2 respuestas
QuitCat

#356 ¿Con el caso de pruebas que ellos te dan funciona bien?

Como dije antes, no parece que hayan incluidos casos de prueba muy "cabrones", pero algunas cosas que veo que no controlas (y que tampoco se si hacen falta):

  • nº de digitos en los 3 primeros campos
  • solo minúsculas en el color
  • que la altura solo tenga 2-3 numeros y "cm" o "in". Esto te estará pasando como bueno "23holaquetalcm"
1 respuesta
MartiONE

#356 Has comprobado que cumpla con la regla que tienen que estar presentes todos los fields?

1 respuesta
LLoid

#357 sí, con los válidos e inválidos de ejemplo funciona (saca 4 válidos y 0 válidos, respectivamente)
#358 está hecho de forma que en cada pasaporte tiene que haber 7 o más campos válidos... aunque ahora que lo dices, si hay 2 campos iguales que son válidos dentro de un mismo tipo de campo mi algoritmo lo daría por bueno y eso no debería ser así :O

creo que me has dado la pista correcta, voy a probar

NeV3rKilL

Está bien que el programa te diga que estás copiando y que metiste la respuesta de otro INPUT que no es el tuyo XD

Sigo liado con las comprobaciones.

Quise probar haciendo un dict de funciones y tal en vez de metiendo IFs como un poseso y me arrepiento :sob:

    validation = {
        "byr":lambda x: len(x) == 4 and int(x) >= 1920 and int(x) <= 2002 ,
        "iyr":lambda x: len(x) == 4 and int(x) >= 2010 and int(x) <= 2020 ,
        "eyr":lambda x: (len(x) == 4) and (int(x) >= 2020) and (int(x) <= 2030) ,
        "hgt":check_hgt,
        "hcl":check_hcl,
        "ecl":check_ecl,
        "pid":check_pid,
        "cid":True # Ignored
    }
1 respuesta