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
Le code
Sympa lâidĂ©e de scanner les nombres autour des symboles plutĂŽt que de scanner les symboles autour des nombres !
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 .
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
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 )
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
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
Pas encore eu le temps de regarder. Je le ferai ce soir mais vous envoyez du rĂȘve la
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
Jâai essayĂ© en brut force pour voir, je nâai meme pas passĂ© la premiĂšre Ă©tape
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
Jâai brute forcĂ© lâĂ©tape 2 en commençant par la fin⊠ça a du tourner ~1hâŠ
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
Je passe en spoiler pour ceux qui cherche encore
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 Du coup jâen ai fais une librairie
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
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
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
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
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