Advent of Code 2023: ChatGPT-4 turbo edition

eZpit

Just beutiful

kotlin
1
CiudadanoEj

alguien mas no entiende el enunciado de hoy?

2 respuestas
R

#152 lo he intentado leer cuando estaba poniendo a dormir a la niña y he visto que requería toda mi atención xD lo retomaré más tarde

Frankicia

#152 lo he leido y parece bastante mal explicado para lo que es.

Segun entiendo,
te dan N semillas y M mapas. Cada mapa es, simplemente, un nivel mas de traduccion con la siguiente informacion:

  • mapa 1 (X to Y ):
    coordenada_destino coordenada_origen longitud

Si tu X esta en [coordenada_origen, coordenada_origen+longitud), pues la traduccion es Y = coordenada_destino + (X - coordenada_origen) (te lo digo rapido, probablemente hace falta algo de tuning a la formula)
Si tu X no esta en ningun rango, la traduccion es Y = X

Cada mapa te da un output que le metes al siguiente mapa y asi hasta el mapa de location

1 respuesta
CiudadanoEj

#154 pero es que entonces no entiendo esto
50 98 2
52 50 48
The second line means that the source range starts at 50 and contains 48 values: 50, 51, ..., 96, 97. This corresponds to a destination range starting at 52 and also containing 48 values: 52, 53, ..., 98, 99. So, seed number 53 corresponds to soil number 55.

no deberia estar la seed number 53 en ese soil?

2 respuestas
desu

#155 la seed aplica identidad, identidad a = a, i.e identidad 13 = 13, si solo si, no existe un mapping.

Seed number 79 corresponds to soil number 81.
Seed number 14 corresponds to soil number 14.
Seed number 55 corresponds to soil number 57.
Seed number 13 corresponds to soil number 13.

14 y 13 no tienen mapping pues identidad. es decir, el mismo valor.

la verdad mucha fumada, advent of parsing lo hace de nuevo... que pereza

R

Así no dan ganas de entrar a leerlo xD

Frankicia

#155 El mapa tiene muchos soils que estan shiftados.

La linea 52 50 48 significa:
Semillas con id 50 hasta 97 [50, 50 + 48) deben ir al soil id 52 hasta 99. Y el mapping es 1 a 1.
Semilla id 50 --> soil 52,
semilla id 51 --> soil 53,
semilla id 52--> soil 54,
semilla id 53 --> 55 (52 + (53 - 50)

1
desu

Si es facil cuando lo lees. Pero que perezota de enunciados y parseos. Suerte que ese mi ultimo dia de AOC xd

Pizzelio

Tremenda pereza la verdad. No sé si lo haré hoy...

Mandarino

Reconozco que tambien me ha costado entenderlo al principio. La parte 1 es mas entenderlo porque implementarlo no es tan complicado. La parte 2 un poco al reves xD
Creo que lo que me ha liado mas es que los mappings te los dan en orden "destination source length" y no "source destination length"

parte2

spoiler

python

B

Parte 1, cuando termine de currar le doy a la parte 2. Realmente la parte 1 se puede ver como un caso concreto de la parte 2, no creo que le añada mucha dificultad.

spoiler

edit, parte 2, gran hueco el de despues de comer para hacer estas cosas!

spoiler

Dependerá de cómo lo hagáis, pero por si acaso

Bug que he metido yo por reciclar codigo
R

Ya me la han liado con la parte 2, muy lento el código si tiro de lo que tengo para la parte 1

Cerealfriend

El día 3 me ha costado horrores, he tenido que recurrir a ayuda en el hilo. El día 4 la parte 1 muy sencilla pero la parte 2 he estado un buen rato figurándome el enunciado.

Esta tarde le doy al 5

B

Contra el ejemplo me funciona bien la parte 2, pero es cambiarlo al input y se me queda hiper pillado. ¿Alguien que pilote de Rust sabe si es porque se está quedando picha con la memoria o hay algo que me estoy dejando? ¿Hay algo así como el bigint en Rust?

Día 05: Parte 1 + Parte 2 [Rust]
1 respuesta
Mandarino

#165 Has mirado los rangos que estas manejando en el input? Yo por ejemplo tengo un rango de 1532286286 a 1532286286+1115055792.
La verdad que no entiendo nada de tu codigo porque no se Rust, pero si estas guardando cada indice en memoria, para este rango en concreto solo eso seria 1115055792*128bits = 16GB. No solo es memoria si no que tienes que calcular el mapping de cada numero (1115055792 en total) solo para un seed-to-soil. Por lo que he visto en Reddit hay gente que lo ha solucionado asi a lo bruto, pero quizas lo tienen un poco mas optimo.
Yo lo que hice fue

spoiler
1 respuesta
B

#166 Yep xDDD no es que se quedara pillado, es que el proceso es heavy de cojones como bien dices.

Ahhh cabrón, claro; lo suyo es hacer un dfs en vez de bfs, o sea, mirar cada valor hasta el final y quedarte con el que ya sabes que es el más bajo en vez de contenerlos a todos como tremendo zote.

draz1c

Yo también he ido a lo bruto y me he quedado sin memoria RAM.

B
Por si os liais con la solucion con intervalos
byJoTaeFe

Estoy igual, lo he conseguido sacar con el ejemplo, pero con el input no puedo procesarlo porque he ido sacando los rangos y metiéndolos en arrays para comprobar xD

Arreglado, vaya tremenda gilipollez.

1 respuesta
Zentakki

#170 Como has hecho?

pd: nada, ya lo conseguí :D

Mandarino

Dia 6: El de hoy facilito!

parte 2

spoiler
Pizzelio

Hay alguna forma de mejorar el rendimiento de la parte 2? La que imagino que primero vamos a hacer la mayoría es bastante lenta pero debe haber alguna fórmula matemática que saca el número más directo y ahorre tener que comprobar todo

Edit: Vale, ya. Soy imbécil xD

BeheritSp

Yo matemáticamente lo he hecho así (es una chorrada en realidad):

Day6 Parte 2
3
Flashk
Day 6 parte 2
B

Parte 1

spoiler

La parte 2 la he hecho a mano, aunque luego he probado mi solución y también va bastante rápido, deberían haber puesto números mas grandes si querían evitar a la gente haciéndola a bruteforce xD

1 respuesta
desu
#176sergioRG:

deberían haber puesto números mas grandes si querían evitar a la gente haciéndola a bruteforce xD

el objetivo del advent nunca ha sido escribir codigo rapido ni eficiente

siempre ha sido mas de golfing y hacer el codigo mas bonito

2 respuestas
B
#177desu:

codigo mas bonito

pues pa tu culo to mi pito venga arnaldo te faltan soft skills

Mandarino

#177 para el leaderboard es el que encuentre la solución lo antes posible, da igual si tu codigo es eficiente, lento y/o infumable. De hecho es como me lo tomo yo, hacer lo que sea para sacarlo rapido.
Para codigo eficiente ya hay leetcoce, codechef etc..
Eso si, si te da igual el leaderboard pues que cada uno lo haga como le.apetezca :P

B

Pues nada, para una vez que le doy a la recursividad me tocan la moral en el punto 2.

Día 06 Parte 1 + Parte 2 [Rust]

EDIT: La verdad que admiro a la peña que es capaz de resolver este tipo de problemas en cuestión de segundos y leyendo en diagonal el enunciado. Supongo que llegará un momento en el que lo tendrás tan mecanizado y habrás grindeado tantos problemas similares que lo harás sin demasiado esfuerzo, pero en mi caso me tengo que repetir mentalmente varias veces -VARIAS veces- lo que estoy leyendo para que las neuronas me hagan conexión y muchas veces me quedo pajarito aún así.