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

NeV3rKilL

#411 Yo vi bisects por ahí y dije.. intedezAnte.... pensando en el ejercicio de hoy. Luego vi que metía el INPUT como int y me he tirado 3 minutos rollo :psyduck: :psyduck: :psyduck: :psyduck: :psyduck: hasta que he caído que era el del día 1.

El lunes se viene la primera limpia de contendientes...

Que no te estén pagando mientras los haces les quita parte de la emoción :(

A cocinar un rico osobuco se ha dicho.

Fyn4r

Dia 5 listo
https://github.com/Fynardo/AoC2k20/blob/main/day5/boarding.py

#420 apuntado

LLoid

parte 1 del día 5 en kotlin:

spoiler

sé que se puede refactorizar para que los 2 métodos privados sean sólo 1 pero eso no sería CLEAN CODE

AikonCWD

Me he fijado que el day5 es un simple ejercicio de operaciones binarias.
Si nos fijamos, el código consta de 7 caracteres y 3. Si elevamos a 2 obtenemos:

27 = 128 [0,127]
23 = 8 [0,7]

Simplemente cambiamos las B y R por 1. Y las F y L por 0 y convertimos de binario a decimal:

FBFBBFF y RLR = 0101100 y 101 = 44 y 5

Con eso obtenemos la fila y columna. Se puede resolver con una función de un par de líneas. Lástima que no sepa convertir a binario en gdscript (el lenguaje que estoy usando). Voy a buscar por google.

9 4 respuestas
B

#424 Sí señor!

LLoid

#424 beautiful

día 5 parte 2:

spoiler
AikonCWD

Vale, he copypasteado una función para convertir de binario a decimal xd. Quedaría así:

Aunque si se hace con un lenguaje que permita esa conversión de tipos sin necesitar función... puede quedar un programa minúsculo.

1 respuesta
B

#427 puedes hacerlo con un for del estilo

num = 0
for char in str:
  num *= 2 # multiplicar por 2 es como shiftar los bits a la izquierda 1 posicion
  if char == 'F':
    num += 1 # sumar 1 es como poner el ultimo bit a 1

Y hacerlo en un oneliner

num = sum([(x == 'F') * (1 << i) for (x, i) in enumerate(s)])

Que por ejemplo para 110101 vendria a hacerlo sumando 100000 + 10000 + 100 + 1, ya que sumar potencias de dos distintas equivale a hacer el bitwise or

1
AikonCWD

La parte 2 no sé como plantearla. El problema es que no estoy entendiendo el enunciado xd.

2 respuestas
r2d2rigo

#429 tan facil como que la ID de tu asiento no esta en la lista de las IDs obtenidas en la parte 1.

B

#429 Tu asiento no está en la lista, pero sabes que si la id de tu asiento es x, los asientos con id x-1 y x+1 sí lo están. Encuentra la id de tu asiento.

AikonCWD

xddddd, lo he hecho mal pero lo he hecho. Osea el código es una mierda como de costumbre, pero it works!

Día 5 completado. Me ha gustado el ejercicio, pero la cosa se está poniendo dura.

R

Día 5
https://github.com/NovelleP/AdventOfCode2020/tree/main/day5

Después de leer #424 veo que me ha quedado mucho código, y muchas operaciones innecesarias xD

Traber

#424 yo lo he visto pero cuando ve intentado pasarlo a binario en C# me daba el número que le salía de los cojones y he tirado por hacerlo con pivotes, luego en casa paso la solución porque tiene tela xd.

desu

meh hoy python ahi va:

queria hacerlo rapido que quiero ver una peli xd

test3y

Iba a decir que el de hoy ha sido el más sencillo hasta hora, pero ya veo que los que vamos a saco y no nos coscamos en principio de cosas como pasar el código a binario las vamos a pasar putas después como metan alguno jodido que haya que optimizar sí o sí. xD

día 5
B

Ahora sí que no entiendo por qué no me funciona mi verificación del día 4:

spoiler
1 respuesta
BeheritSp

#437 te falta verificar y contar el último pasaporte seguramente

1 1 respuesta
B

#438 Joder qué estúpido, cierto, ya que no acaba en espacio... ha sido meterle otra línea blanca y listo.

1 respuesta
Traber

Lo prometido es deuda, mi solución:

Day5

Y ya con un poco más de calma, la función optimizada usando notación binaria:

__GetSeatID()
1 respuesta
r2d2rigo

#440 tengo preguntas sobre el codigo que sueles poner:

  • Por que usas el prefijo __ para las funciones?
  • Por que usas long y no int? Sobre todo cuando luego estas haciendo un Convert.ToInt32.
1 respuesta
Traber

#441 Suelo usar la siguiente nomenclatura:

public VariableName
protected _VariableName;
private __Variable;

Como ves, las barras bajas que preceden a la variable me indican el nivel de protección de la misma.

En cuanto a lo segundo, en estos casos que no se lo que me viene uso long para evitar desbordamientos, he usado ToInt32 porque es un copia-pega de StackOverflow y ni me apetecía cambiarlo xd. He visto que funcionaba y así se ha quedado.

desu

#439 A mi la solucion tampoco me iba, osea ni copy pasteando el codigo de gente de aqui o internet xd depende del SO en que estas hay que vigilar. tambien depende del formato en que guardes el input, yo usaba .txt y ahora ya no uso nada y lo dejo raw.

eZpit

Me está molando Rust.
Si alguien domina, apreciaría feedback para aprender lo máximo posible estos días :)

Day 5:

Pt 1
Pt 2

Y los commits pt 1 & pt 2

1 respuesta
Lecherito

#444 Puedes escribir los numeros como 0_u32, poniendo el tipo detras del numero, aunque si pones el tipo explicito en la variable te hara esto automaticamente, pero et quitas del 2 as i32.

Tambien tienes el if let Some(char) = chars.next() { println!("{}", char); }, si solo quieres hacer algo sin correr el riesgo del unwrap y sin hacer un match cada vez.

JuAn4k4

Yo lo hice sin binario porque ni me paré a pensarlo la verdad, ya me pareció lo suficientemente fácil.

Rust

spoiler
AikonCWD

A ver mañana con qué paranoia nos sorprenden

Unrack

Se me olvidó añadir el mío. Hecho siguiendo el enfoque binario. Creo que lo suficientemente clean!

spoiler

Usando el splitlines() que me recomendó @Fyn4r

B

Dia 6, parte 1

spoiler

parte 2

spoiler
1 1 respuesta
JonaN
Día 6, Python

#449 Que limpito queda con el regex, tendré que aprender a usarlo xd. He mirado la documentación y entiendo casi del todo tu regular expression, pero podrías resumírmelo en pseudo-código?

1 respuesta