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

Axtrix

Hoy me dio hasta pereza leer el enunciado

bornex

Pues listo un dia menos: https://github.com/soasada/advent-of-code-2020/blob/master/crates/day3/src/day3.rs este me ha gustado bastante y he fallado un par de veces en el primero, pero al final lo he conseguido.

Los entendidos de Rust, ¿hay alguna forma de hacer un chart_at() en un String (no confundir con un &str)? He tenido que pasar cada linea en String a Vec<char> de esta forma:

let chars = line.chars().collect::<Vec<char>>();

Siendo line un String

2 respuestas
aren-pulid0

#300 ostia, pues yo para este entre unas cosas y otras he tardado 2 horas xdd voy bien si

desu

#302 Piensa que un string no es un array de char, es un array de utf8. lo que pasa es que un acceso por posicion [] no tiene porque ser o(1) y por eso rust te hace trabajarlo.

no vas a encontrar una manera de hacer o(1) en utf8

Para una respuesta que se entienda y no la mia busca slicing y utf8 xd

edit: TLDR String::from("hello").chars().nth(3).unwrap(); // l

Prueba lo mismo con unicode.

2
B

#297 ya estoy, pero no sé en qué se basa la puntuación, no estrellas, eso sí, sino la puntuación

2 respuestas
aren-pulid0

#305
La prueba se desbloquea a las 00:00 de la noche, cuanto mas tiempo pasa desde el desbloqueo hasta que resuelves la prueba, menor puntuación

1 respuesta
Fyn4r

#305 Al primero que termina le dan N puntos, donde N es el número de gente apuntada (en nuestro caso 40 ya xD), a los siguientes N-1, N-2, N-3, etc. Cuando el número de gente cambia se recalcula

1 respuesta
JuAn4k4

#211 gracias, iré aplicando cosas día a día según vaya afianzándose con rust. Las ayudas vienen bien.

B

#306 #307 Gracias
Yo las hago cuando puedo, me vale sacar todas 😂
Hoy tuve que hacer día 2 y 3. Pero lo que me reta y me gusta es el sacarlo 💪

Ranthas

Pues terminado el día 3 con una política de copypaste de las buenas.

Masilleo a full

R

Día 3. A estas horas pocos puntos xD

parte 1

spoiler

parte 2

spoiler

#197 no veas, parece que te he copiado la regex. Habia pensado solucionar este con regex, pero me ha dado pereza jej

B

D3 E2: La verdad, no está optimizado ni nada, copy paste a saco y reincio:

spoiler
1 respuesta
eZpit

Amos a probar Rust!
#763988 & https://github.com/guillermomuntaner/AdventOfCode2020-Rust

B

.

1 respuesta
B

#314 😂 pero funciona! 😂🤷‍♂️

1
JuAn4k4

Listo, Rust:

#302 por si quieres comparar

spoiler

No se si alguien conociendo Rust sabe como re-enumerar la lista tras filtrarla para que el indice salga bien en el segundo filter sin hacer collect+iter+enumerate de nuevo como puse.

Ya que estoy, lo estoy intentando hacer funcional y cada vez me va gustando un poquito más Rust. Eso si aún no he tenido que usar ningún smart pointer, ni lifetimes....

Una cosa que me ha gustado como ha quedado es calcular las posiciones sin tener que ir sumando el vector dirección, sino con el índice (fila/columna).

2 respuestas
desu

#316 Deberias leer mi blog, just hoy he publicado sobre este tema... Hay que buscar las builtin functions. En mi caso he ido a vector, de vector a iter(), y de ahi he visto el step. https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.step_by

 
    map
        .iter()
        .step_by(y_slope)
        .enumerate()
        .filter(|&(idx, tile)| is_tree(tile, idx * x_slope % tile.len()))
        .count()

Tu solucion me gusta mucho la verdad. Yo he estado re implementado la rueda para practicar recursividad y no habia pensado en esta.

1 1 respuesta
T

Dejo mi solución, la verdad que esta ha sido más fácil que la de ayer.

spoiler
test3y

Dejo los de los días 2 y 3 en un pantallazo a pelo.

Una duda, ¿hay alguna fecha límite para completar los puzzles una vez que se hayan plublicado todos?

bornex

#316 me mola bastante tu solución, le voy a tirar yo también a los siguientes con el estilo funcional. La verdad es que al principio me hice la picha un lio con los indices. Por cierto, en tu función parse_file te puedes ahorrar el path y meterle directamente el string a File::open.

EDIT: Lo que también quiero meterle caña es a los unit tests, se que Rust tiene algo para ello pero no me los he mirado. Puede ser que después de este advent of code me anime a hacer algo con Rust.

1 1 respuesta
Traber

El de hoy es jodido, ya he empezado a usar clases y me estoy cagando en dios xD

1 respuesta
JuAn4k4

#317 Joder, ni me había planteado que estuviera hecha esa fn la verdad. Estuve buscando el volver a filtrar pero con índices regenerados después de filtrar una vez, pero no que me hicieran ya el filtro.

#320 Hacer tests es súper sencillo en Rust por lo visto, no hace falta ni cambiar de fichero.

LLoid

#321 no he empezado a programarlo pero leyendo el enunciado de la parte 1 el de hoy me parece el más fácil de todos, supongo que algo se me escapa

1 respuesta
JuAn4k4

#323 Es igual que el del día 2 pero más completo vaya.

brew

El otro dia en /dev alguien metio mierda a groovy asi que aqui va la primera parte

spoiler

Me toca trabajar un poco asi que la segunda parte va a esperar

1 respuesta
aren-pulid0

café y le echo un vistazo a ver que tal hoy

1 respuesta
brew

#326 listo que aun sigo dormido

desu

clojure.lang.LazySeq cannot be cast to java.lang.CharSequence
java.lang.Character cannot be cast to java.lang.CharSequence

Que puto asco. En haskell el sistema de tipado te ayuda en clojure me paso mas rato mirando donde co;o tengo este error que resolviendo los problemas.

Traber

Joder, me estaba tirando de los pelos viendo la validación y resulta que el error era del copia-pega xD. Hecho, el de hoy era interesante, pero demasiado de masillas.

MartiONE

Andad alerta con los requerimientos de la segunda parte que he estado mirando 5 minutos buscando la tontería mas grande