Advent of Code 2024 - Queréis problemas?

Mandarino

Hice la parte 1 de hoy dia 21, pero la parte 2 estoy estancado... tendré que darle una pensada y volver a intentarlo mas tarde.

edit:

Day 21 part1
Day21 part2

buff habia escrito un tocho y mediavida me dio error de "sesion ha expirado" y me devolvio al editor de texto pero vacio, casi me pego un tiro xDD por suerte al darle a "atras" en chrome recupere el texto...

Mandarino
day22
1 respuesta
desu

#122

spoiler

hoy dominguete voy a hacer un par, lo que estoy pensado es si pasarme de rust a python xq ando practicando python :S tendre que aguantarme las ganas xq quiero completarlo con rust

1 respuesta
Mandarino

#123

spoiler
1 respuesta
desu

#124

spoiler

he hecho el dia 16... me ha dado por hacerlo recursivo for fun, no me terminaba, lo he borrado, lo he hecho con una stack como siempre y termina en un par de ms... si es que XD me sorprende que rust no me lo haya optimizado con -O3, tan mal he escrito el recursivo? algo raro habre hecho.. solo he hecho el patron tipico

en concreto de no terminarme a pasar a 5ms

1 1 respuesta
Mandarino

#125 He leido un poco del tema y por lo que he entendido SIMD es para operaciones vectoriales (Single Instrucion Multiple Data) cuando hay que calcular lo mismo muchas veces (arrays grandes). Como SIMD no soporta % pero si +-/*, al reescribir el modulo con esas operaciones te permite usar SIMD (dependiendo del codigo, obviamente). Ademas, solo sirve para "calcular muchos valores en paralelo", pero si hay dependencias entre ellos (como el problema actual), no sirve.

Tambien vi que en algunas ocasiones el compilador directamente te optimiza % para usar simd.

Python por si solo, al ser un interpreter, no soporta este tipo de instrucciones, pero parece que si usas numpy puedes llegar a usarlo. Para tareas con muchas operaciones si usas numpy te beneficias de la velocidad de C, pero nunca lo he probado.
Osea que depende del lenguaje si es capaz de detectar cuando compilar a instrucciones simd o no.

De todas formas no conocia el tema de SIMD asi que gracias xD, es interesante. Sabia por encima que habian operaciones vectoriales pero no como se llamaba en concreto

1 respuesta
desu

#126 depende de si usas cpython, pypy, mojo... como digo no se con que lo estas ejecutando.

https://www.modular.com/mojo

yo mojo lo quiero probar, tiene un buen equipo detras

y el truco este del % lo aprendi literal ayer, jajaja por eso te lo he puesto eh, pura coincidencia, por si querias probarlo.

Mandarino
day23
Flashk
day 23
1
Mandarino
day 24 part 1
day 24 part 2
1 respuesta
desu

#130 cual es el enunciado de la part2?

spoiler
1 respuesta
Mandarino

#131

spoiler
Mandarino

Se acabó :smile:

day 25
1 2 respuestas
robpike25

#133 enhorabuena a todos! me desenganché a la semana pero he estado curioseando vuestras soluciones :D

2
Flashk

#133 Felicidades Mandarino!!!

1
Cerealfriend

enhorabuena a todos!! que constancia, disciplina teneis, además de calidad para terminarlos todos!
yo empezando la segunda semana se me empezaron a hacer bola y entre trabajo, salidas y dificultad de los problemas me es imposible seguir el ritmo aunq me los haré todos, ahora que estoy de vacaciones he retomado por el day10

2
Flashk

Veamos, voy con alguno de los que tenía pendientes:

Day 24
1 respuesta
Mandarino

#137

spoiler
1 1 respuesta
Flashk

#138

spoiler
1
Mandarino

Llevo unos dias haciendo los AoC de 2015 y voy por el 22 (hecho). Como dijo @desu también me han parecido mas faciles, a excepcion de 1:

2015 dia 19 parte 2

Mención especial para 2 tambien, que me han dado problemas:

2015 dia 20
2015 dia 22

Me quedan 3 dias y acabo el 2015

1 1 respuesta
Flashk

Ayer por la tarde noche acabé el último pendiente.

Voy a comentar un poco los últimos el proceso que seguí con los que me dejé por el camino.

day 16
day 17
day 21

Y con esto, ¡terminado! Me ha gustado bastante este año. Diría que han quitado bastante regex de los inputs (cosa que creo que @desu agradece, ya que siempre comenta que odia tener que andar parseando inputs, y no le falta razón porque menos regex permite centrarte más en el problema y menos en perderte sobre por qué no está cogiendo X grupo). Han habido muchísimos puzzles de Array 2D, y diría que este año la temática ha ido bastante más orientada a grafos.

Aprendizajes de este año:

  • He aprendido a abordar de una manera más automática la memoization. Antes, me perdía un poco con esto, (no entiendo por qué, en realidad es bien sencilla!), pero ahora veo que es tan simple como usar un Map y como clave los parámetros de una función (si son varios, un Record de java ayuda bastante en este tema) y como valor lo que sería la salida. A continuación, solo tengo que poner la comprobación en el mapa nada más entrar en el método y añadir un valor al mapa antes de salir del mismo. Sin duda es más fácil con la caché de python, pero está bien aprender a hacerlo manualmente en Java.
  • Visualización de grafos en JGraphT y representación DOT de los mismos.
  • Dijkstra, ya lo conocía y había usado otros años, pero creo que al haberlo tenido que repetir varias veces este año, ahora lo veo más asentado.
2 2 respuestas
desu

#140 a mi me ha gustado que sean problemas mas practicos, en el sentido situaciones que te encuentras y no tanto teoricos para plantear problemas de libro.

#141 este año he hecho 10 bfs/dfs creo jaja ha sido el Advent of Grid.

la memoization es sencilla si la pagas con memoria, si no pues uno de los problemas mas difíciles de la informática "cache invalidation". yo en los leetcode la sufro mucho porque siempre te piden deshacerte de ella jaja.

a ver cuando puedo terminármelos, cuando tenia tiempo no estaban todos y me hice 2015... a mi este año me han parecido bastante faciles de plantear las busquedas y grafos es de mis temas fuertes.

1 1 respuesta
Mandarino

#141 Enhorabuena por terminarlo!

#142 que problemas de leetcode te piden deshacerte de memoization? He hecho 900 y diria que he hecho menos de 5 que ponen restricción de memoria.
O te refieres a la puntuación de CPU/MEM que te da al resolver el problema?

1 1 respuesta
desu

#143 me refiero en las entrevistas y en concreto a usar la cache con un diccionario, que es lo que hace @cache @lru_cache y demas que son lo mas simple del mundo... ojala poder usarlo siempre. eso si que suelen pedir deshacerlo y hacer algo mas eficiente.

a mi siempre me han pedido algo tabular con arrays, el tipico dp[] o dp[][], que sera lineal, o constante / in-place porque hay algun truco.

por ejemplo en los tipicos de grids tener un set de casillas vistadas vs marcar las casillas visitadas en la grid y deshacerlas después. que salvo en los casos de encontrar paths, que es mas eficiente que copiar el set a cada llamada, me parece una bobada. cualquier solución con memoization, maunque sea la cache basica dict/set, ya me parece suficientemente bueno a nivel algoritmico...

pero bueno, asi es el mundo. lo de las entrevistas es el cuento de siempre.

1 respuesta
Mandarino

#144 ah bueno, si es entrevistas si que depende mucho de lo que le apetezca al entrevistador xD. Si se quiere optimizar tanto quizas ya ni tiene sentido utilizar Python.
Para AoC o leetcode yo le meto @cache y palante.

1 respuesta
desu

#145 a mi los advent además me gusta el formato, xq si te pones como reto optimizarlo en tu pc, le metes un time adelante... un hyperfine y a optimizar jjaa... ya no es tanto la teoria como en las entrevistas o paginas como leetcode o hackerrank.

pues te voy a hacer caso y voy a probar a usar mas el @cache guarro en mis problemas... asi me centro primero en solucionarlo y luego ya si eso lo cambio si me lo piden.

1