Calendrier de l'avent 🎄 (mais sans chocolats)

Mini galĂšre sur des indices Ă  un moment, mais au final pas trop de soucis aujourd’hui. J’ai sĂ»rement pas la version la plus optimisĂ©e (notamment pour la partie 2), mais flemme de faire des sets et des maps en plus :smiley:
Le code

Sympa l’idĂ©e de scanner les nombres autour des symboles plutĂŽt que de scanner les symboles autour des nombres !

1 « J'aime »

Avec ta solution, pour la partie 1, il Ă©tait possible de comptabiliser deux fois un chiffre s’il Ă©tait adjacent Ă  deux symboles non ? J’arrive pas Ă  voir dans l’énoncĂ© si c’était un cas de figure possible/voulu :thinking:.
J’avais pensĂ© Ă  faire comme toi puis me suis retenu de peur de gĂ©nĂ©rer des erreurs Ă  cause de ça

Oui completement, si un chiffre est adjacent Ă  deux symboles, il sera comptĂ© pour chaque symbole. J’avoue que je n’ai pas pensĂ© Ă  ce cas la, si a si c’etait voulu ou non (ca pourrait l’etre).

En tout cas, ca n’a pas posĂ© de problĂšme sur mon input. Mais c’est peut etre un coup de bol :smiley:

1 « J'aime »

Pas de soucis aujourd’hui (code), je referai peut-ĂȘtre une passe dans la journĂ©e pour avoir de meilleurs regex.

Edit: J’ai fait une passe pour simplifier un peu le code.

Pas de difficultĂ© pour le day 4, y’a juste a dĂ©rouler !

Jour 4 assez facile sur le papier, mais fait en plusieurs fois et du coup des erreurs bĂȘtes de calcul se sont glissĂ©es par manque de concentration 


Jour 4

day4.php · main · Adventcode / Advent Code - 2023 · GitLab

Part 1 TOTAL : 23673
Part 2 TOTAL : 12263631

Rien de notable sur le jour 4 effectivement.

jour 4

https://github.com/Nebsorg/AdventOfCode/blob/main/2023/Day04.py

2023 --- Day 4: Scratchcards ---
****** First Star = 21158
****** Second Star = 6050769

Duration: 0:00:00.012514

Ouai facile, si on lis bien jusqu’au bout (2h de perdu parce que je donnais le score et pas le nombre de carte dans la phase 2 :sweat_smile:)

2 « J'aime »

Comme je viens de dire Ă  mon fils qui a perdu 2 points en math pour avoir tracĂ© la mĂ©diatrice au lieu de la mĂ©diane : lis bien l’énoncĂ© et rĂ©ponds Ă  la question posĂ©e :smiley:

Je trouve la partie 2 d’aujourd’hui un poil pĂ©chue Ă©tant donnĂ© que ce n’est que le jour 5.

Les derniers du top 100 du jour l’ont fini en presque 30 minutes et les premiers en 10 minutes, c’est vraiment long.

J’ai eu de la chance et mon code a marchĂ© du premier coup, j’ose mĂȘme pas imaginer le debug douloureux si ça n’avait pas Ă©tĂ© le cas


[Correction] Il semblerait d’aprùs Reddit que certains ont choisi de bourriner pour la partie 2 et que (pour eux) ça passe en quelques secondes. Donc vous pouvez essayer de passer en force au lieu de vous chauffer le neurone comme j’ai du le faire !

Pas le temps de faire la partie 2 ce matin, il me reste une partie de l’algo Ă  Ă©crire en espĂ©rant que ce que je fais passe en mĂ©moire/temps (le bourrinage ne vas sĂ»rement pas passer sur mon vieux laptop)

Edit: l’avantage des meetings inutiles, c’est que j’ai pu finir la partie 2. Mon idĂ©e Ă©tait la bonne, et c’est marrant parce que ça ressemble Ă  un exo que je donne lorsqu’on recrute les nouveaux diplĂŽmĂ©s (intersection de segments). Code

1 « J'aime »

Pas encore eu le temps de regarder. Je le ferai ce soir mais vous envoyez du rĂȘve la :scream:
Rien que les temps du leaderboard donne effectivement le ton

oh putain le jour 5 
 Alors la premiere partie, ca va. Mais alors la seconde ! je ne vois pas du tout comment la prendre pour le moment :smiley:

J’ai essayĂ© en brut force pour voir, je n’ai meme pas passĂ© la premiĂšre Ă©tape :smiley:

Va falloir que je ruse, mais je crois que j’ai une piste.

Bon perso faut que je trouve une autre façon de stocker les infos pour la partie 1 dĂ©jĂ  

Ma façon de faire explose la RAM :sweat_smile:

J’ai brute forcĂ© l’étape 2 en commençant par la fin
 ça a du tourner ~1h


1 « J'aime »

Bon, jour 5 terminĂ©. Clairement, je n’étais pas prĂȘt Ă  ce gap de difficultĂ©.
J’ai assez rapidement trouvĂ© la solution de l’étoile 1. L’étoile 2 m’a obligĂ© Ă  repenser ma structure de donnĂ©e, mais j’ai trouvĂ© assez vite la solution. La mise en oeuvre fut une autre histoire :smiley:

Je passe en spoiler pour ceux qui cherche encore :slight_smile:

Je me suis dis, pas de soucis, on va manipuler des intervalles plutĂŽt que des listes de graines.
Bon, la j’ai passĂ© des plombes a rĂ©inventer la roue en Ă©crivant deux mĂ©thodes dont j’avais besoin :

  • calculer l’intersection entres deux intervalles
  • extraire d’un intervalle donnĂ© l’intersection avec un autre et conserver les autres parties

J’ai bien mis 1h à faire mes fonctions de gestion d’intervalles, mais je me suis dis que ça me resservirai un jour :slight_smile: Du coup j’en ai fais une librairie :slight_smile:

Et la, je suis tombĂ© sur 2 bugs que j’ai mis des plombes Ă  rĂ©soudre :

  • un vachement vicieux, liĂ© Ă  python et que je ne connaissais pas. J’ai suspectĂ© assez vite un problĂšme dans ma boucle.
    Le problĂšme en question : quand on fait un for sur une liste, et qu’on supprime l’élĂ©ment en cours de la liste, python « saute Â» l’élĂ©ment suivant !
    En fait l’index change et comme il y a un Ă©lĂ©ment de moins dans la liste, tout est dĂ©calĂ© de un. C’est pas illogique quand on y rĂ©flĂ©chi, mais ca m’a surpris.
    J’ai contournĂ© le truc en faisant un while avec un pop(), et je rajoute Ă  la liste les Ă©lĂ©ments Ă  vĂ©rifier restant de l’intersection

  • un oublie d’un -1 dans l’application du calcul de la transformation de l’intervalle 
 l’éternel erreur de l’id du n-ieme Ă©lĂ©ments Ă  partir de x qui amĂšne Ă  l’élĂ©ment x+n-1 et pas Ă  x+n :smiley:

Une fois ces deux bugs rĂ©solus, et j’y ai passĂ© au moins 3h, ca a roulĂ© tout seul !

Jour 5

https://github.com/Nebsorg/AdventOfCode/blob/main/2023/Day05.py

2023 --- Day 5: If You Give A Seed A Fertilizer ---
****** First Star = 621354867
****** Second Star = 15880236

Duration: 0:00:00.024115

Mais clairement, la difficultĂ© du jour 5 corresponds Ă  un jour 15 de l’annĂ©e derniĂšre !

EspĂ©rons que l’accĂ©lĂ©ration de la difficultĂ© ralentisse :smiley:

2 « J'aime »

Modifier une liste alors qu’on est en train de la parcourir c’est rarement une bonne idĂ©e si on a pas une trĂšs bonne raison de le faire. Il vaut en gĂ©nĂ©ral mieux re-crĂ©er une nouvelle liste et y copier les Ă©lĂ©ment que tu gardes plutĂŽt qu’enlever des trucs d’une liste tout en la parcourant. En python il me semble que la fonction filter() fait ça.

En rĂšgle gĂ©nĂ©rale c’est prĂ©fĂ©rable de travailler avec des structures immutables autant que possible. Mais c’est pas toujours Ă©vident si on a pas l’habitude. Advent of Code est une bonne occasion de se faire violence et changer ses habitudes :slight_smile:

2 « J'aime »

Enfin un jour 6 trĂšs abordable, ça change cette annĂ©e ! Y’a mĂȘme pas besoin d’essayer d’ĂȘtre malin, ça passe crĂȘme en brute force.

J’aime bien quand c’est plus rapide d’entrer les valeurs d’input à la main dans le code que de faire du parsing :slight_smile:

1 « J'aime »

La partie 2 du jour 5 a eu raison de moi. Je pense que je suis parti sur la mĂȘme idĂ©e que @anon10092024 sauf que j’ai un bug dans l’algo que j’arrive pas Ă  voir. J’y retournerais de frustration mais plus tard :stuck_out_tongue:

1 « J'aime »