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

GuaNaGe

Esta noche lo empezaré. Seré fiel a Java....

Lo mas jodido es el inglés, pero bueno. Soy muy pussy, losé

mecmec

#89 tengo bastante olvidado el tema, pero sería buscar la solución más óptima matemáticamente de forma que si el volumen de datos fuera muy superior se redujera el cómputo de forma significativa. Hacerlo por fuerza bruta debería ser la última solución a proponer ya que es directa.

2 respuestas
sergioRG

#92 Ahora mismo que se me ocurra no veo mejor manera que fijar dos números x, y con dos loops y buscar en un hashmap, o mediante binary searches, 2020 - x - y, que sería cuadrático (o n2 logn si usas binary search) en lugar de cúbico (lo que sería si usáramos tres loops).

Igualmente la entrada son 200 números, se puede sacar a fuerza bruta realmente.

B

.

1 1 respuesta
B

#94 por dios cuánto código no?

JuAn4k4

Apuntame https://github.com/juancarrey/aoc-2020

QuitCat

#92 sinceramente no creo que se pueda hacer en menos de O(n) que ya se ha puesto.

#86 está explicado en #80

1 respuesta
isvidal

Os dejo mi solucion de la parte 1 en JS, muy sencillo no? Al menos a lo bruto.

spoiler

Y el repo donde lo metere: https://github.com/jvidalv/advent-of-code-2020

edit la parte 2 aun mas guarra:

spoiler
aren-pulid0

Entonces para la parte 1 que es la más sencilla:

¿Lo correcto es hacer un hashmap con la misma clave:valor por cada elemento de la lista de números y luego iterar sobre ese hashmap?

1 respuesta
ckrass

#99 No. En ningún momento iteras el hashmap.

Se utiliza como si una caché se tratara para no tener que volver a calcular x cosas ...

R

Bueno, otro año más, nunca he terminado todos los dias, este año currando menos U.u
usuario AoC: NovelleP
repo: https://github.com/NovelleP/AdventOfCode2020

Ya de paso dejo solucion del día 1 en Python

parte 1: O(N) en tiempo y espacio

spoiler

parte 2: O(N2) en tiempo y O(N) espacio

spoiler
aren-pulid0

Joder que rabia me da no haber ido a la universidad, podría alguien decirme dónde puedo aprender un básico de la complejidad algorítmica?

No me entero cuando habláis de eso, y aunque intuyo ciertas cosas porque mi solución "se parece" no llego a entender el porqué de la cosas ni cómo funciona mi código por dentro

Si me pasáis alguna documentación o algún sitio por dónde empezar estaría muy agradecido

1 respuesta
JuAn4k4

Parte1 en Rust, la niña no para de despertarse xD: https://github.com/juancarrey/aoc-2020/commit/86c15b9596b2d8ee026887466b6b93f368fde625

La solución es un Set, metes todo al set, y luego iteras el set para buscar el remaining de cada uno (2020 - x), hasta que encuentres el que lo tiene (se presupone que solo hay 1) y ya está.

Fase 2 en 1 minuto: https://github.com/juancarrey/aoc-2020/commit/bb3cb5093a327fc57c4087483c96a56893f3316c

2 respuestas
B

#97 vale ya entiendo lo que quieres decir, tienes razón, al hacer a y luego b, en b coincide con el mismo que a, tenía que haber controlado eso, cierto

Gracias

isvidal

#103 En las especificaciones no dicen nada de no repetidos, de ser eso cierto si que es verdad que con un set te quitas complejidades.

1 respuesta
JuAn4k4

#105 Funciona perfectamente, no hay repetidos, ni más de un resultado, salvo el hecho de que a+b = b+a y a+b+c = a+c+b = b+a+c = b+c+a = c+a+b = c+b+a
Tampoco está el 1010 por lo que no hace falta comprobar que esté, lo mismo pasa para cuando hay 3 , tipo: a+b+b. No he hecho ninguna comprobación para esos casos.

MaSoBa

#103 En ese caso, si en el input hay dos 1010 no valdría no?

En otro orden de cosas, ¿sería más eficiente ordenar primero el array para no seguir calculando más allá del número 1010?

1 respuesta
JuAn4k4

#107 No, es más barato recorrerlo que ordenarlo, a no ser que hagas bucket sort, y aun así no creo que compense. (Lo que sí puedes hacer es saltartelos, y en fase2 saltarte b, si b<a).
Y no, no funciona si hay dos 1010, o en la fase 2, si hay repetidos.

Pero vamos si hubiera repetidos seria cambiar el set por un map y tener el count de numeros que hay, para poder usar un número más de una vez:

si hay dos a -> probar 2a+b
si hay 3, probar 3a
probar a+b+(remaining)

voy a hacerlo... xD

1
LLoid

me apunto yo también, pero voy con retraso

y aparte llego tarde HUEHUE

B

.

JuAn4k4

Actualizado comprobando los edge cases de las dos fases usando HashMap con count, aunque no hace falta para nada pero bueno: https://github.com/juancarrey/aoc-2020/commit/8f0cd1e12c8e17f869e02d1e6071fadc9a6f52ba
Muy guarro pero me voy a dormir que sino no duermo nada.

GuaNaGe

¿Alguien que controle de java podría pasarme su solución para echarle un ojo y comparar? La mía es basura máxima. Curro mañana y la he picado volando

spoiler
Traber

Venga masillas, que el segundo caso es facilón también:

spoiler
pineda

no entiendo como me lo formatea mal... en fin, link directo
https://github.com/pineda89/advent-of-code-2020/blob/master/day02/main.go

spoiler
1 respuesta
Traber

#114 Hostia el tryhardeo de pasar cada línea a un objeto la virgen xD. Bien hecho, pero joder, para algo como esto ni me lo había planteado.

aren-pulid0

Si no haces la prueba el día que sale no te dan la estrellita?

1 respuesta
BeheritSp

Dejo aquí mi day2 en python:

spoiler
1 respuesta
NeV3rKilL

Yo he creado 3 listas una de diccionarios con la política, una de strings con el password y una de booleanos de si cumplían. Luego simplemente era contar cuantos true tenía la de booleanos. Está bien para jugar con list comprehension.

#117 Elegante la segunda comprobación. :raised_hands:

if (string_to_check[first_pos] == required_letter) != (string_to_check[second_pos] == required_letter):
1 1 respuesta
sergioRG

Yo lo he hecho con regex

Parte 1

spoiler

Parte 2

spoiler
Axtrix

Q.E.D

spoiler

Usuarios habituales

  • Traber
  • sergioRG
  • QuitCat
  • BeheritSp
  • ciza
  • Fyn4r
  • AikonCWD