Xerto
Décembre 6, 2023, 7:37
824
Jour 6, la partie 1 est ezpz, la 2 jâai semi-bruteforcĂ©e pour Ă©viter de perdre trop de temps Il y a sĂ»rement moyen dâĂȘtre trĂšs efficace en faisant une dichotomie, mais honnĂȘtement flemme de coder ça.
Le code donc , ça tourne en ~1.4s sur mon vieil i3
Day 6 aprĂšs le day 5 :
TorchĂ© en 20 minutes. Surement moyen dâoptimiser aussi mais dĂ©jĂ câest pas de la pure brute force donc je suis content.
astro
Décembre 6, 2023, 9:43
827
anon10092024:
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
Jâai le mĂȘme comportement sur le langage que jâutilise au boulot, il suffit de parcourir la liste a lâenvers .
1 « J'aime »
Bon Day 6, rien a voir avec hier .
Je pense que le day 5 a du en décourager qq uns!
Deux heures Ă essayer de debug hier sans rĂ©sultat. Deux minutes pendant ma pause aujourdâhui et je vois direct le souci. DĂ©goutĂ©. Mais jây suis arrivĂ©.
4 « J'aime »
Bon, jour 6 qui passe tranquille en brute force (3s en python âŠ). Jâai mĂȘme pas essayĂ© autrement. Lâalgo est stupide, mais ça passe.
Jâavais commencĂ© Ă rĂ©flĂ©chir Ă lâĂ©quation associĂ©. Mais entre une boucle for Ă©crite en 30 secondes et rĂ©soudre lâĂ©quation, jâai eu la flemme
Bref, jour 6 torché en 20min en buvant mon café
Jour 6
https://github.com/Nebsorg/AdventOfCode/blob/main/2023/Day06.py
2023 --- Day 6: Wait For It ---
****** First Star = 281600
****** Second Star = 33875953
Duration: 0:00:03.641092
Grenat2
Décembre 6, 2023, 9:23
831
Jâai commencĂ© un peu tard cette annĂ©e mais câest bon jâai rattrapĂ© le retard.
Jour 6 tranquille, fait aussi en 20 min.
Le jour 5 nâĂ©tait pas si compliquĂ© avec la mĂ©thode bruteforce. 20 min Ă coder, 20 minutes Ă exĂ©cuter (en multithread) sur ma vieille machine. Un peu la flemme de faire un code plus optimisĂ©, jâaurais sĂ»rement mis plus de temps au total
1 « J'aime »
Xerto
Décembre 7, 2023, 7:47
832
Pas trop de soucis pour le jour 7. Code
Pas de difficulté particuliÚre sur ce jour 7.
Juste quelques astuces a utiliser pour se simplifier la vie:
astuce 1
Transformer TJQKA en ABCDE pour faire un tri alpha pour le rank.
Et remplacer J part 1 pour la part 2
astuce 2
Compter le nombre de carte unique pour faire la catĂ©gorisation (utilisation du set en python!) â plus que 5 cas
Jâarrive a une catĂ©gorisation assez simple au final.
Résumé
uniqueCardLst = list(set(hand))
uniqueCardCnt = len(uniqueCardLst)
if uniqueCardCnt == 5:
handType = HIGH_CARD
elif uniqueCardCnt == 4:
handType = ONE_PAIR
elif uniqueCardCnt == 3:
if hand.count(uniqueCardLst[0]) == 2 or hand.count(uniqueCardLst[1]) == 2:
handType = TWO_PAIR
else:
handType = THREE_OF_A_KIND
elif uniqueCardCnt == 2:
if hand.count(uniqueCardLst[0]) == 1 or hand.count(uniqueCardLst[0]) == 4:
handType = FOUR_OF_A_KIND
else:
handType = FULL_HOUSE
elif uniqueCardCnt == 1:
handType = FIVE_OF_A_KIND
Avez vous trouvĂ© dâautres astuces ?
1 « J'aime »
Jour 7 terminé aussi. Pas vraiment de difficulté.
Je suis passĂ© par lâĂ©tablissement dâune valeur numĂ©rique respectant lâordre des diffĂ©rents main, puis jâai fais une fonctionne qui Ă©value une main suivant cette mĂ©thode.
Par contre, je nâai pas pensĂ© Ă utiliser lâordre alphabetique comme @arzhuras et jâai beaucoup sa solution qui est bien plus simple et efficace !
jour 7
https://github.com/Nebsorg/AdventOfCode/blob/main/2023/Day07.py
2023 --- Day 7: Camel Cards ---
****** First Star = 246912307
****** Second Star = 246894760
Duration: 0:00:00.012524
Dadal
Décembre 7, 2023, 4:22
835
Pareil, une fonction pour trier les cartes (jâme suis juste « cassĂ© la tĂȘte » en « base 13 » parceque 13 cartes et que jâaime pas triĂ©s des strings). Et pour le type de mains, comme toi. Jâai juste mis un switch Ă la place des elif et je retourne un valeur. Quâil suffit dâajouter au dĂ©but de la main pour faire le tri tout seul.
Résumé
match len(types) :
case 5 : return 0 #highCard
case 4 : return 1 #One pair
case 3:
if t[1] ==2: return 2 #Two pair
return 3 #3 of a kind
case 2 :
if t[0] ==2: return 4 #full house
return 5 #4 of a kind
case 1 : return 6 #5 of a kind
Edit: Le « base 13 », câest juste pour dire que jâai dico carte->valeur et que jâai une boucle qui fait
for char in cards:
result *= 13
result += valueDic[char]
return result
rien de bien difficile si on compte bien le nombre de carte (ouai jâaurais du mettre len(valueDic) Ă la place de 13, ça mâaurait Ă©vitĂ© un run de dĂ©bug )
1 « J'aime »
Suite a ta remarque, je viens de voir que depuis le Python 3.10 (sortie il y a 2 ans), ils ont enfin mit un équivalent au switch case dans Python! Ca me rendait fou ce manque.
Until version 3.10, Python never had a feature that implemented what the switch statement does in other programming languages. So, if you wanted to execute multiple conditional statements, you would've had to use the elif keyword like this: age = 120...
Enfin Bon jâai plus quâa le tester!
Dadal
Décembre 7, 2023, 4:39
837
Aaah câest pour ça que je vois pleins dâexemples avec ces horribles elif partout⊠Les switch existaient pas. Du coup les programmeurs pythons remontent un peu dans mon estime
Et je viens de tester ! Ca marche!
Ca rend vraiment le code plus lisible
Oui, je te rassure, on ne faisait pas ça que par pure masochisme
Le Python, câest la vie
+1 programming language war
HELLO WORLD ! âHi !â, âHola !â, âNi-hao!â We, humans, communicate with others with the help of languages like English, Spanish, French and many more. Similarly, to communicate with a computer and to make it understand our instructions, programmers...
Reading time: 6 min read
deneb
Décembre 8, 2023, 6:14
839
Je bloque sur la partie 2 du jour 8. Je sens bien quâil doit y avoir un truc oĂč il faut dĂ©tecter les moments oĂč ça se rĂ©pĂšte et utiliser ces infos pour calculer la rĂ©ponse intelligemment, mais je nâarrive pas Ă mettre le doigt dessus.
Va falloir que je reprenne un café ou que je sorte une feuille et un crayon.
Câest trĂšs frustrant que ça arrive le jour 8.
Bon courage Ă vous !
deneb
Décembre 8, 2023, 6:40
840
Bon, je lâai passĂ©, mais câĂ©tait vraiment du grand nâimporte quoi. Je ne comprends toujours pas pourquoi bidouiller ainsi les chiffre que jâai trouvĂ© donne le bon rĂ©sultat.
Le jeu de donnĂ©es fourni a un comportement bien particulier qui nâa rien de garanti Ă premiĂšre vue, les chemins auraient pu se comporter dâautres façon, et il nây a pas moyen de le savoir de prime abord.
Ăa a fini sur un vieux site en PHP pour calculer le Least Common Multiple, je me sens saleâŠ
Je viens de passer le jour 8.
Pour la part2, il faut simplement trouver les cycles de chaque entrĂ©e/sortie individuellement â ne surtout pas dĂ©rouler les chemins en parallĂšles. Jâai vĂ©rifiĂ© aussi que la sortie Z repointe bien sur le mĂȘme circuit que pour lâentrĂ©e A: il y a donc quâun seul niveau de boucle pour une entrĂ©e donnĂ©e
Et ensuite yâa plus quâa Calculer le PPCM des diffĂ©rents cycles (jâai pas refait le PPCM moi mĂȘme, jâai Ă©tĂ© chopper un bout de code sur le net⊠ça va rentrer dans ma librairie ça aussi!
Xerto
Décembre 8, 2023, 8:17
842
En fait lâinput est bien calibrĂ©, mais il faut le dĂ©couvrir (mĂȘme si lâexemple donne un peu le ton) : les cycles pour chaque position de fin xxZ sont de mĂȘme longueur, câest Ă dire que si on part de xxZ, il faut N pas pour retourner Ă xxZ, si on part de yyZ, il faut aussi N pas pour retourner Ă yyZ. AprĂšs il faut trouver combien de steps il faut en partant de chaque uuA pour aller Ă un xxZ. Et finalement ça donne des Ă©quations Ă rĂ©soudre du type e + xN = M, d + x N = M, etc.
1 « J'aime »
deneb
Décembre 8, 2023, 8:43
843
Lâinput est encore mieux calibrĂ©e que ça: Pour que ça marche il faut que la sortie Z repointe bien sur le mĂȘme circuit que pour lâentrĂ©e A, mais aussi le fasse en autant dâĂ©tapes quâentre lâentrĂ©e A et le dĂ©but de la boucle , ce qui est loin dâĂȘtre acquis vu quâon a quelques Ă©tapes avant de commencer la boucle Ă chaque fois.
Rien dans le jeu dâexemple ou les instructions ne laisse Ă supposer que câest forcĂ©ment le cas.
1 « J'aime »