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

r2d2rigo

#630 no se yo que decirte, mas que la dificultad creo que el mayor detrimento es que sean aburridos o mal planteados.

A mi el de ayer me motivo bastante, el de hoy lo he hecho por obligacion.

1 respuesta
Ranthas

#631 Yo creo que buscan un equilibrio entre la dificultad y la diversión al resolverlo.

La propuesta del intcode del año pasado estuvo bien, pero escaló demasiado rápido, y el tener que refactorizar el puñetero intcode todos los días al final hizo lo que mandara a tomar por culo. Este año creo que han estado más acertados, si incluyen más problemas como el de ayer, o como el del día 4, pues de lujo.

O quizás algo tipo partiendo de un conjunto de instrucciones reducido, como en el problema de ayer, ir sacando más problemas apoyandose en ese set de reglas, pero sin tener que estarlas modificando a diario como el año pasado.

1 respuesta
B

#632 Yo prefiero problemas independientes entre sí, no hay nada que joda más que una cadena de problemas basada en una misma temática que no te gusta. Con un poco de variedad minimizas esto.

Es como los problemas de 20 apartados que dependen entre sí en los exámenes. Como te jodan desde la a...

1
test3y

A mí el de ayer me pareció chulo. Si van sacando más problemas de ir añadiendo complejidad a la máquina por mí bien. Del estilo como el de hoy, como no pongan entradas con una n mayor, pues le quitan algo de gracia.

R

Día 9. Para la parte uno he usado 2sum, asi que la complejidad se queda algo como O((N-25) * len(preambulo)), vamos O(N * K), donde K es 25 en este caso (la longitud del preambulo). Para la parte dos he usado dos punteros, windowing o un intento de ello. La complejidad diria que es O(N), pero si alguien confirma mejor xD

parte 1
parte 2
1 respuesta
B

#635 Si, tu two pointers es lineal. idx2 incrementa a cada iteracion, idx1 siempre sera <= idx2 y solamente incrementa tambien, por lo que ese bucle realmente hace 2N operaciones a lo sumo, lo cual es lineal.

1
Traber

O se explican como el puto culo, o el de hoy es una puta real mierda pinchada en un palo.

1 respuesta
B

#637 El enunciado es una mierda, yo lo resumiría como:

Parte 1: Encuentra una manera de enchufar todos tus cacharros para que formen una cadena en la que no haya diferencias que no sean 1 o 3 entre dos cacharros adyacentes. Multiplica el número de diferencias de 1 por el número de diferencias de 3

Parte 2: Cuenta de cuantas maneras puedes conectar el cacharro de 0 al de max(numeros) + 3 habiendo diferencias de 1, 2 y 3 entre cacharros adyacentes.

Estos problemas recién levantao son una mierda xddd

Ranthas

Otra vez haciendo el idiota porque no leí que al final hay que usar también tu adaptador....

ciza

Pues a mi la parte 1 me ha parecido demasiado tonta mientras que la parte 2 tiene mas miga. Luego posteo la solución que he puesto.

1 respuesta
B

#640 Supongo que has hecho algo precido a mi solución, no?

spoiler
1 1 respuesta
ciza

#641 de hecho la mia es menos imaginativa

spoiler
1 respuesta
B

#642 Creo que no la acabo de entender muy bien tu solución.

1 respuesta
ciza

#643 es lo primero que se me ocurrio, basicamente:

spoiler
1 respuesta
B

#644 Aaaaaahhhhh, pues la verdad es que es bastante más creativo que lo que he hecho yo.

Lo que he hecho yo es básicamente lo que vine a explicar en #595 , que es un patrón que una vez lo dominas lo puedes aplicar bastante braindead.

Te tardaba mucho en ejecutarse?

2 respuestas
BeheritSp

Bueno, a mi este me ha gustado mucho también. Este me ha llevado más de 1 hora a lo tonto

Sobre la parte 2:

spoiler

Aquí el código:

Part 1
Part 2
Unrack

La segunda parte hay que tratar de ir sacando las permutaciones presentes en la cadena de tipo [1,1,1,3...] de la forma.

spoiler
ciza

#645 no lo he medido pero era instantaneo basicamente. De todos modos la lista es muy pequeña.
En ipython me saca en torno a 3ms de tiempo de ejecucion

Fyn4r

Acabo de leer el de hoy, no me podía creer que la primera parte fuese una parida tan grande xD

Luego me pongo con la segunda

Ranthas

Estoy atascado con la segunda:

  • Si encuentro un elemento que se puede eliminar, entonces tengo 2 permutaciones: está o no está
  • Si encuentro dos elementos que se pueden eliminar, entonces tengo 4 permutaciones: ab, a, b, o ninguno.
  • Si encuentro tres elementos "que se pueden eliminar", entonces tengo 7 permutaciones: abc, ab, ac, bc, a, b, c. No puedo quitar los 3 por la restriccion de la diferencia de 3.

Sin embargo, aplicando esta logica, el ejercicio nno me sale....algo se me debe estar escapando

2 respuestas
ciza

#650 cuando eliminas uno o dos, puede ser que otro que considerabas que se podia eliminar, ya no se pueda eliminar y te rompa la lógica.

1 respuesta
Unrack

#650 Empieza al reves. Si encuentras tres elementos que se pueden eliminar -> Si encuentro un elemento que se puede eliminar.

1 respuesta
Ranthas

#651 #652 Lo que hago es crear grupos, es decir, tengo X grupos de 3, Y grupos de 2 y Z grupos de 1. Tengo en cuenta que no se solapen, por ejemplo:

  • 1,4,5,6,7,10 => de ahi sacaria solo un grupo de 2: {5,6}. No puede ser {5,6,7} por el 10, tampoco {4,5,6} por el 1.

Luego multiplico todo, 7X * 4Y * 2Z, para obtener el nº de permutaciones total. Sin embargo me dice que mi solución es menor, por lo que me estoy dejando algo atrás; si fuese mayor, estaría repetidiendo/solapando permutaciones.

Después le doy otro intento

2 respuestas
QuitCat

#645 Justo me acordé de ese comentario y es lo que apliqué en la segunda parte:

spoiler
1
ciza

#653 he probado tu solución y funciona bien. Te estas dejando grupos...

1 respuesta
QuitCat

#653 Acuérdate que se empieza desde 0 pero no está en la lista de voltajes

ciza

Con un poco de imaginación, mas las ideas del thread, seguramente esta es la solucion mas criptica ever

spoiler
3
Fyn4r

joe, que forma de escalar la segunda parte xD

Fyn4r

Dobleposteo para decir que he terminado y tengo la solución más lamentable de la historia para la segunda parte

spoiler
Saiko9

Vuelvo a estar al día aunque tenga que hacer el de hoy aun:

Como siempre todo en c++.

dia 8:
https://github.com/Semedi/aoc_2020/blob/main/day8.cpp

dia9:
https://github.com/Semedi/aoc_2020/blob/main/day9.cpp

El dia 8 me ha molado pero mi codigo es una chapuza con bastantes lineas. Si alguien que maneje de c++ le echa un ojo (aunque sea a las estructuras) y me dice si estoy usando los shared_pointers bien se lo agradezco, porque no tengo ni idea xD (los gotos son la motivación máxima que me pedia el cuerpo).