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

AikonCWD

Me acabo de levantar y no entiendo el enunciado. A ver si a la tarde me lo puedo leer otra vez xd

Traber

No me apetecía hacer regexp, pero tampoco iba a ser tan cutre de comparar caracteres o contarlos 1 a uno, esta es mi solución:

Day6
2 respuestas
eZpit

Hoy he visualizado el problema muy facilmente pero me he dado de ostias infinitas con el type inference de Rust.

Day 6 - Pt 1
Day 6 - Pt 2

Aprecio feedback de los Rustaceans :)

MaSoBa

He ido cumpliendo todos los días pero me daba un poco de vergüenza compartir el código porque llevo 4 meses sin tocar código por una baja. Pero empiezo a coger de nuevo soltura así que ahí va:

Día 6 Parte 1
Día 6 Parte 2
LLoid

día 6 parte 1 en kotlin:

spoiler
r2d2rigo

#452 LINQ es tu amigo.

1 respuesta
Saiko9

Yo dejo aquí el dia 5 entero en c++ que lo acabo de hacer.

Los findes no suelo poder tocar el ordenador, a ver si me pongo al día.

Ranthas

Bueno, ayer tocó día familiar, pero esta mañana he aprovechado y he hecho el día 5 con un cafecito y ayuda de mis gatos. A mitad del camino se me ha encendido el bombillo, si interpreto la cadena como un número binario, sale al toque. Se nota que usar Java te atrofia el cerebro, si ya leyendo el título del día 5 (Binary Boarding) tendría que haberme dado cuenta.

Haré el seis esta noche si me quedan ganas después de tanta compra navideña.

B

#450 Por partes

(?:) significa non-capturing group. Es decir, creas un grupo para matchear cosas pero no te quedas con el resultado en ningun lado, si yo tengo

(?:a)(b)(c)(?:d)

y matcheo abcd, los grupos que obtendre seran "b" y "c", porque estoy descartando los otros dos.

>>> r = re.compile(r'(?:a)(b)(c)(?:d)')
m = re.match(r, 'abcd')
m.groups()
('b', 'c')

Entonces, (?:\n){2,} significa haz un non-capturing group de saltos de linea, y que haga match dos o mas veces.

Por qué dos o más veces? Porque el input es tal que

a\n
b\n
\n
c\n
d

por lo que matcheando dos o más saltos de línea matcheo de forma efectiva los separadores de los casos de input. Si hago split a partir de los matches obtendré el input en sí.

La pregunta final sería que por qué el grupo del salto de línea es non-capturing. La respuesta es que de no serlo el split me capturaría también los saltos de línea entre casos de input, por lo que usaría uno de split solamente, considera esto

import re
blank = re.compile(r'(?:\n){2,}')

re.split(blank, 'a\n\nb\nc')
['a', 'b\nc']

blank = re.compile(r'(\n){2,}')
re.split(blank, 'a\n\nb\nc')
['a', '\n', 'b\nc']

#456 eres siempre así de borde? todos tus posts son bastante cortantes.

3 respuestas
JonaN

#459 Clarísimo, no había caido en que lo que buscas son los separadores para luego hacer split, por eso no acababa de tener sentido. Gracias!

Fyn4r

Dejo por aquí la parte 1 del día de hoy. A ver si despues de comer hago la segunda parte.

day6 part1

P.D Me estáis asustando con más regexp xDD

1 respuesta
Unrack

#461 Hay cierto gusto inexplicable por las regexp por aquí.

Mi solución oneline (tengo hecho un apaño por ahí para arreglar la última fila a ver si lo dejo más clean). Alguna sugerencia?

spoiler
1 2 respuestas
Lecherito

Las expresiones regulares son lo mejor que existe

1 respuesta
AikonCWD

#463 me cago en tu calavera

1 respuesta
Lecherito

#464 50 euritos y te apa;o la regex que necesites hombre

1 respuesta
B

#462 Este último año me he comido muchas validaciones de movidas varias en el trabajo, por eso le he pillado el vicio. Muy chulos tus onelines btw

1 1 respuesta
Unrack

#466 A mi es algo que nunca he necesitado y me da pereza ponerme a ello (entiendo que una vez pillas buen nivel está genial pero bff). No hay alguna solución tipo lenguaje natural to regexp? Igual es momento de crearlo...

1 respuesta
B

#467 Las regex cuando tienes suficiente soltura adquieres mucho el proceso mental de pasar a lenguaje natural lo que lees, o de pasar a regex cualquier idea que tengas en lenguaje natural, siempre que sea lo bastante concisa y esté dentro del espectro de lo que puede modelar una regex.

ciza

#462 las soluciones one-line me producen sensaciones enfrentadas entre su belleza y el asco que me dan

1 respuesta
B

#469 Para problemas así están chulas, en la vida real son una garantía de que tu yo de dentro de 8 meses se va a cagar en tu puta madre. O cualquiera que herede tu código.

Yo era muy amigo de hacerlas en los integration tests, que se hacen en Python, hasta que me volví a encontrar con uno que escribí yo fallando año y pico después.

Pero insisto, para problemas sueltos está guay y mola pensar en cómo hacerlas, si es lo que te gusta.

Traber

#459 Yo creo que es al revés, LINQ es una herramienta para manejo de colecciones de C# que es la real polla y sirve para todo, desde iterar, hacer queries sobre el contenido (como si fuera SQL prácticamente xd), modificar la colección al vuelo, etc, creo que no lo decía a malas xd.

#465 50 euritos y te cambio la mostaza del avatar por leche de la mejor calidad.

1 respuesta
JonaN

Espero también que en algún momento se conviertan en problemas de darle al coco de verdad donde la dificultad no sea parsear el input xd.

1 respuesta
Traber

#472 Son problemas que requieren una solución en forma de números o una palabra, con lo que se trata de transformar una entrada en una salida. Si esperas algo del estilo CTF creo que aquí no lo vas a encontrar.

1 respuesta
Ranthas

Pues al final he resuelto el día 6,

La primera parte es sencilla agrupando en un mapa el nº de apariciones de cada letra; así tienes que contar solo el nº de claves; para la segunda parte, agrupas los conjuntos de respuestas afirmativas de cada grupo de personas y haces la intersección entre ellos.

1 respuesta
B

.

1 respuesta
NeV3rKilL

#474 ¿No necesitas el número de personas de cada grupo para nada?

Estáis madrugando un cojón para hacer esta mierda. Sí que os llama lo del mod.

2 respuestas
B

#476 En mi caso es porque mi gata me despierta a las 7 dejándome un calcetín en la cara a modo de regalo, a ver si así me pongo contento y le doy de comer xddd

1 respuesta
Fyn4r

#477 que maja, la mia hace ruido y tira cosas xd

1 respuesta
B

#478 Son adorables pequeños hijos de puta

desu

#475 La verdad estan siendo unos problemas aburridos.