Effectivement, pas de soucis non plus sur ce day 11
et effectivement part 2 = part1 si la premiÚre partie a été faite de façon rusée!.
Jour 11 beaucoup plus simple
Jour 11
https://github.com/Nebsorg/AdventOfCode/blob/main/2023/Day11.py
2023 --- Day 11: Cosmic Expansion ---
****** First Star = 9312968
****** Second Star = 597714117556
Duration: 0:00:00.037152
Bon maintenant faut que je trouve le courage de retourner aux frontiĂšres du jour 10
Jour 12 trÚs intéressant !
Jâai implementĂ© la partie 1 en essayant dâoptimiser autant que possible sentant la douille arriver pour la partie 2, malheureusement ce nâest pas suffisant et mon CPU est en train de chauffer. NâhĂ©sitez pas Ă investir votre temps de cerveau disponible dĂšs la partie 1.
[Edit] Je bloque pour le moment, je ne vois pas trop comment prendre le problĂšme plus efficacement.
Jâai un truc qui fonctionne Ă peu prĂšs pour la partie 1 du jour 12 (ça tourne en 1.5s sur mon vieux laptop en Python), par contre câest clairement pas suffisant pour la partie 2.
Idées
Pour le moment, ma façon de faire câest : au fur et Ă mesure, jâavance dans ma string en remplaçant un ? par # ou ., et Ă chaque fois je vĂ©rifie que câest cohĂ©rent avec la rĂšgle.
Sauf que câest overkill : on ne veut pas toutes les strings possibles, on veut toutes les combinaisons possibles. Je pensais quâun autre moyen Ă©tait de dire : on rĂ©cupĂšre les blocks ([#?]+), pour chaque block on calcule toutes leurs rĂšgles possibles et leur occurence, et aprĂšs il suffit de « concatĂ©ner » les blocks pour que la rĂšgle globale soit respectĂ©e. Sauf que ça ne marche pas pour une string du type ???####???####??? vu que ça fait un Ă©norme block.
Idée
Je pense essayer de commencer par caser les plus gros blocks, ça devrait relativement contraindre les possibilités pour caser les plus petits.
AprĂšs il ne faut pas avoir des millions de possibilitĂ©s de caser les gros blocks non plus⊠à tester, mais câest pas gagner. Jâai lâimpression de louper un truc important.
DeuxiÚme Idée
Au lieu de me prendre la tĂȘte avec les plus grosses valeurs, je prend une value en milieu de liste et je divise la liste de part et dâautre. Ensuite, je trouve toutes les positions valides pour la valeur du milieu, et pour chaque position valide, je recurse sur la droite et la gauche, en Ă©lagant dĂšs quâune possiblitĂ© retourne 0 position valide. Ăa se tente, mĂȘme is ça serait plus efficace en prenant la plus grande valeur de la liste plutĂŽt que la valeur du milieu.
Rhaaaaa la deuxiÚme idée rame à mort sur certaines lignes mais ça passe !
Victoire ! Du coup jâai paumĂ© mon aprĂšs midi avec ces conneries, mais bon sang que ça valait le coup. Je nâai jamais rencontrĂ© un problĂšme qui mâa forcĂ© Ă abandonner 3 approches diffĂ©rentes Ă la suite avant de trouver un truc qui marche Ă peu prĂšs.
partie 1 réalisée proprement surement optimisable (10s). Nonogramme for ever pour ceux a qui ça parle
On sent bien le gag arriver pour la part 2. Jâai mĂȘme pas tentĂ© le brut force !
Pour la partie 2, jâai des idĂ©es pour y arriver, mais non dispo jusquâĂ demain. Je le ferai donc sĂ»rement demain.
'nuf said (pourcentage de participants qui nâont fait que la partie 1).
EspĂ©rons que le jour 13 soit moins prise de tĂȘte. ([Edit] En effet câest bien plus abordable)
Sinon il semblerait (une fois de plus pour les problĂšme de parcours dâarbres trop grands) quâune bonne approche pour la partie 2 soit le Dynamic Programming, autrement dit de la rĂ©cursion (ou pas) tout en mettant en cache les rĂ©sultats dĂ©jĂ trouvĂ©s pour un input donnĂ© afin dâĂ©viter de refaire la mĂȘme chose encore et encore. Perso mon algo nâutilise pas de DP (juste de la rĂ©cursion) et il se finit en environ 2 minutes (en Kotlin), donc Ă vous de voir.
Pour le moment je met 12.2 de cÎté
Jour 13 partie 1 OK sans trop de soucis, pas eu le temps de trop regarder la partie 2 mais jâai encore peur que le brute force pose problĂšme. Jâai essayĂ© dâĂȘtre malin pour ma partie 1, peut-ĂȘtre que ça peut passer pour 2.
Edit: ça passe pour la partie 2, le code
Non non ça passe crÚme.
jâai du mettre en pose AoC hier, et je serai en deplacement pendant 4 jours Ă partir de demain, donc plus dâAoC pour moi avant la semaine prochaine
Pas de gros soucis pour ce day 13. MĂȘme code pour la partie 1 & 2. Pas de brut force.
Jâai mis un peu de temps avant de percuter que : les miroirs dĂ©marrent toujours en premiĂšre ou derniĂšre ligne/colonne
Une petite astuce pour optimiser le tout: dâabord chercher le dĂ©but et la fin dâun mirroir avant de regarder si tout est identique (a 0 ou 1 prĂšs) entre les 2
Je garde le 12.2 dans ma todo mais pas mal occupé aussi!
Hier mon code pour 12.2 nâĂ©tait pas du tout assez optimisĂ©, ça bloquait dĂ©jĂ sur lâexemple.
LĂ câest en train de tourner sur mon input, ça devrait le faire.
En attendant je vais regarder le jour 13.
Je pense que tout le monde a dû avoir comme moi un input avec que des « ? » - Tu peux commencer par tenter juste celui-la et voir si ça se termine.
Ouais non du coup ça nâa pas fini cette nuit
Tant pis je passe, idem pour 13.2 oĂč je ne suis pas inspirĂ©.
Heureusement le 14 jâai rĂ©ussi les deux parties
Le 14.2 je lâai fini Ă la main pour trouver quand ça se rĂ©pĂ©tait aprĂšs quelques centaines de cycles, puis jâai calculĂ© la valeur qui tombait au milliard avec la calculatrice windows.
MĂȘme pas honte
Pas de soucis pour 14.1, pour 14.2 jâimagine que ça va cycler, mais pas le temps ce matin de coder lâalgo. On verra plus tard.
Edit: partie 2 finie, le code
Ah ah, bon pareil. Mais jâai au moins fait le modulo en Python
Jour 15 tranquille, le seul challenge câest de comprendre le problĂšme.
Je suis bien dâaccord, beaucoup de blabla pour pas beaucoup de code au final
le fil rouge sur le fil vert, le fil bleu surâŠ