Aujourd'hui, je considĂšre ma carte comme une grille avec 0,0 en haut Ă gauche, puis je cherche les lignes/colonnes vides, puis l'emplacement des galaxies que j'associe par paires.
#!/bin/python3defintlen(nb):l=0whilenb>=1:nb=nb/10l+=1returnldefispart(puzzle,line,col,n):try:ifpuzzle[line][col-1].isdigit():return0exceptIndexError:passtry:foriinrange(1,5):ifpuzzle[line][col+i].isdigit():n=n*10+int(puzzle[line][col+i])else:breakexceptIndexError:passforjin[1,-1]:foriinrange(-1,intlen(n)+1):try:ifpuzzle[line+j][col+i].isdigit()==Falseandpuzzle[line+j][col+i]!=".":returnnexceptIndexError:passforiin[-1,intlen(n)]:try:ifpuzzle[line][col+i].isdigit()==Falseandpuzzle[line][col+i]!=".":returnnexceptIndexError:passreturn0defisgear(puzzle,line,col,j):try:ifpuzzle[line][col].isdigit()==False:return0exceptIndexError:return0ifj!=-1:try:ifpuzzle[line][col-1].isdigit():return0exceptIndexError:passstart=0foriinrange(-1,-5,-1):try:ifpuzzle[line][col+i].isdigit():start-=1else:breakexceptIndexError:breakp=ispart(puzzle,line,col+start,int(puzzle[line][col+start]))returnpdefsolve1(puzzle,testing=False):s=0forlineinrange(len(puzzle)):forcolinrange(len(puzzle[line])):ifpuzzle[line][col]==".":continueelifpuzzle[line][col].isdigit():p=ispart(puzzle,line,col,int(puzzle[line][col]))s+=piftestingandp!=0:print("The part ",p," at ",line,";",col," is ok.")iftesting:print(s)returnsdefsolve2(puzzle,testing=False):s=0forlineinrange(len(puzzle)):forcolinrange(len(puzzle[line])):ifpuzzle[line][col]=="*":ng=0g=[0,0,0]foriin[1,0,-1]:forjin[1,0,-1]:g[ng]=isgear(puzzle,line+i,col+j,j)ifg[ng]!=0:ng+=1ifng==3:breakifng==3:breakifng==2:iftesting:print("Gear at ",line,";",col," with parts ",g[0],";",g[1])s+=g[0]*g[1]eliftesting:print("Gear at ",line,";",col," but with ",ng," parts.")iftesting:print(s)returnstest1="""467..114.....*........35..633.......#...617*...........+.58...592...........755....$.*.....664.598.."""result1=4361test2=test1result2=467835defsolve(short=False):print("----Part 1----")ifshort==False:ifsolve1(test1.split("\n"),testing=True)!=result1:print("Not working.")returnFalseelse:print("Maybe working?")withopen("input.txt",'r')asfile:lines=file.read().split("\n")s1=solve1(lines)print(s1)print("----Part 2----")ifshort==False:ifsolve2(test2.split("\n"),testing=True)!=result2:print("Not working.")returnFalseelse:print("Maybe working?")withopen("input.txt",'r')asfile:lines=file.read().split("\n")s2=solve2(lines)print(s2)returns1,s2if__name__=="__main__":fromsysimportargvtry:ifargv[1]=="--summary"orargv[1]=="-s":solve(short=True)exceptIndexError:solve()
C'est en effet une trĂšs bonne piste, mais je ne pourrais pas l'utiliser. En effet, je n'ai pas la main sur le proxy et la box derriĂšre lesquels je suis, et l'administrateur est trĂšs trĂšs trĂšs frileux sur l'ouverture des ports.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# Python
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023, jour 11. ĂvaluĂ©Â Ă Â 1.
Aujourd'hui, je considĂšre ma carte comme une grille avec 0,0 en haut Ă gauche, puis je cherche les lignes/colonnes vides, puis l'emplacement des galaxies que j'associe par paires.
Je cherche ensuite la distance entre les paires de galaxies, et ajoute à ces distances le nombre de lignes/colonnes vides comprises entre les deux galaxies multiplié par un facteur (1 pour la 1er partie, 1000000-1 pour la 2e ).
Le code :
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# Un grand classique, mais toujour aussi long à résoudre
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023 : Jour 10. ĂvaluĂ©Â Ă Â 2. DerniĂšre modification le 10 dĂ©cembre 2023 Ă 14:41.
Quand j'ai vu que l'énoncé nous demandait de définir une boucle fermée, j'ai tout de suite senti qu'on allait devoir en calculer l'aire dans la partie suivante.
Je ne me suis pas trompé.
Dans la partie une, une récursion sur toute la boucle suffit (en augmentant la limite de récursion).
Ma logique pour la partie deux est que certains motifs nous font entrer ou sortir de la boucle, il suffit de les repérer en parcourant toute la carte.
Et beaucoup de gestion d'erreur pour repérer les erreurs de logique quand on code ou pour ne pas avoir à tester les longueurs des chaßnes.
Voici mon code :
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: Python
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023 : Day 9. ĂvaluĂ©Â Ă Â 1.
Je ne connaissais pas moi-mĂȘme la fonction
all
, j'ai fait au plus simple avec une fonction codée par mes soins. Mais c'est vrai qu'on pourrait gagner en efficacité.Et avec des nombres négatifs, il doit sûrement y avoir des nombres négatifs, ce qui explique que
sum
retourne0
.Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# Python
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023 : Day 9. ĂvaluĂ©Â Ă Â 1.
Un exercice étonnamment simple aujourd'hui, mais les explications me semblent un peu embrouillées, est-ce fait exprÚs ?
Quoi qu'il en soit, voici mon code :
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# Encore des maths, du Python et de la POO
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023, day 8. ĂvaluĂ©Â Ă Â 1.
Ma solution aurait pu ĂȘtre mieux optimisĂ©e pour la lisibilitĂ© et la redondance, mais elle fonctionne. Je dĂ©finis une classe pour les nĆuds, surcharge quelques opĂ©rateurs, prĂ©traite quelques donnĂ©es, et trouve le ppcm en utilisant le module
math
de Python.Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# Python
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023, day 7. ĂvaluĂ©Â Ă Â 1.
C'est trÚs trÚs trÚs louche : on est un jour impair et la difficulté est raisonnable. Nous sommes trahis.
POur aujourd'hui, j'ai défini deux classes Hand et HandJoker trÚs semblables et qui ont certains opérateurs surchargés pour pouvoir utiliser la fonction
sorted()
.AprÚs les avoir triés dans des listes par catégories, ont les tris et on récupÚre le score.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# Python et math
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023, day 6. ĂvaluĂ©Â Ă Â 1.
TrĂšs clairement un exos de math qui pourrait ĂȘtre donnĂ© Ă des secondes, il fallait que ça tombe le jour oĂč je n'avais pas le temps avant le soir.
Ma solution :
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: Python sans brûlage de CPU ni explosion de RAM
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message [Doublon] Advent of Code 2023 : Day 5. ĂvaluĂ©Â Ă Â 1.
Au début, je m'étais dit naïvement :
AprĂšs m'ĂȘtre fait rappeler Ă l'ordre par mon OOM Killer, j'ai mis en place une solution plus simple qui applique directement les modifications aux numĂ©ros de graine et se souvenant s'il a dĂ©jĂ modifiĂ© cette valeur (pour Ă©viter de changer 3 fois par Ă©tape les numĂ©ros).
La partie 2 m'a donnée beaucoup plus de fil à retordre, car ce n'est pas simplement :
Mais l'OOM Killer proteste encore une fois, m'obligeant à finalement essayer de gérer des intervalles plutÎt que des valeurs. AprÚs beaucoup de débuggage et d'arrachage de cheveux, j'ai fini par trouver la recette qui s'exécute instantanément.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# Python sans brûlage de CPU ni explosion de RAM
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message [Doublon] Advent of Code 2023 : Day 5. ĂvaluĂ©Â Ă Â 1. DerniĂšre modification le 05 dĂ©cembre 2023 Ă 16:01.
Une solution dont je ne suis pas peux fier, puisquâelle est Ă©conome en ressource et prend moins d'une seconde Ă terminer. Et j'ai enfin commencĂ© Ă utiliser la POO :
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: Python
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023 : Day 1. ĂvaluĂ©Â Ă Â 2.
J'ai vérifié avant et avait fais quelques tests dans la premiÚre partie, il n'y a pas de zéro. Et si c'était le cas, il suffirait d'ajouter une ligne au dictionnaire.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# Simple et rapide
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023 : Day 4. ĂvaluĂ©Â Ă Â 1.
Une solution simple mais efficace :
J'ai trouvé le problÚme étonnamment simple, j'y suis arrivé du premier coup pour les deux parties.
Et contrairement à beaucoup de monde ce jour-là , cette solution est presque instantanée à l'exécution, de l'ordre de 0.01 sec.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# Python
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023 : Day 3. ĂvaluĂ©Â Ă Â 1. DerniĂšre modification le 04 dĂ©cembre 2023 Ă 20:49.
Voici ma solution du jour :
J'ai passé beaucoup de temps à essayer de comprendre pourquoi diable les test fonctionnaient mais pas l'input ! La réponse était dans ma fonction pour récupérer la taille d'un entier :
Avec
while nb > 0
au lieu dewhile nb >= 1
. Mais les données de test fonctionnaient, c'était incompréhensible.Et oui, je suis un grand adepte du
try ... except
quand je code vite et crade.Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# C'Ă©tait trop simple... je suspecte un piĂšge !
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023 : Day 2. ĂvaluĂ©Â Ă Â 1.
Ma solution en Python :
C'Ă©tait presque simple aujourd'hui, c'est suspect.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# Python
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Advent of Code 2023 : Day 1. ĂvaluĂ©Â Ă Â 1.
Ma solution :
AprÚs quelques essais en remplaçant avant de traiter, je me suis rendu compte que le plus simple était de reprendre intégralement la logique de la partie 1 en vérifiant une chaine plutÎt qu'un nombre.
Et c'est plutĂŽt propre.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: J'y retourne !
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au journal Advent of code 2023. ĂvaluĂ©Â Ă Â 2.
Salut,
Le leadboard LinuxFR 2023 est-il déjà crée ou pas ?
On pourrait aussi essayer de faire comme l'année derniÚre, un journal par jour.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: Les mails, c'est compliqué....
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au journal IncompĂ©tence Web. ĂvaluĂ©Â Ă Â 4.
Et parce qu'il faut toujours rire de l'incompétence : https://grisebouille.net/reglons-le-probleme-du-chomage/
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: Il est loin le temps des cassettes (92-93)
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au journal IA, fais-moi Ă©couter ce que j'aime ?. ĂvaluĂ©Â Ă Â 5.
Petit point libriste : il existe une alternative libre à Shazam nommée Mousai qui fait partie du GNOME Circle, qui existe en version mobile et dont voilà le dépÎt git.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: 100patates
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au journal Il est temps que la communautĂ© internationale fasse un choix. ĂvaluĂ©Â Ă Â 3.
Pour ceux qui ont
la flemme de chercherde lĂ©gers trous de mĂ©moire, voici qui devrait vous rafraichir :Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: Total manque de respect
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au journal Il est temps que la communautĂ© internationale fasse un choix. ĂvaluĂ©Â Ă Â 5.
Gee a aussi fait une BD sur le sujet : https://grisebouille.net/foutez-la-paix-a-ma-bouffe/
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: un outil tiers
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Se connecter Ă un bureau Ă distance Ă travers une connexion mobile. ĂvaluĂ©Â Ă Â 3.
Auto-réponse : Apache Guacamole semble pouvoir fournir un service semblable, à explorer plus en détail.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: un outil tiers
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Se connecter Ă un bureau Ă distance Ă travers une connexion mobile. ĂvaluĂ©Â Ă Â 1.
Le cas 1 me semble une trÚs bonne idée, je note.
Ne serait-il pas possible, si on voulait pousser le bouchon un peu plus loin, d'imaginer qu'on héberge un service libre semblable à NoMachine chez un Chaton ou autre hébergeur dans ce style ? Je vais chercher.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: Ce que j'avais fait Ă une Ă©poque .....
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Se connecter Ă un bureau Ă distance Ă travers une connexion mobile. ĂvaluĂ©Â Ă Â 3.
C'est en effet une trĂšs bonne piste, mais je ne pourrais pas l'utiliser. En effet, je n'ai pas la main sur le proxy et la box derriĂšre lesquels je suis, et l'administrateur est trĂšs trĂšs trĂšs frileux sur l'ouverture des ports.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
# La suite de l'histoire
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au message Guichet unique, microentreprise et identitĂ© numĂ©rique. ĂvaluĂ©Â Ă Â 3. DerniĂšre modification le 21 novembre 2023 Ă 20:41.
Il y a une suite Ă l'histoire de Gee.
Mais pas de solution pour l'instant.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: IntĂ©rĂȘt ?
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au lien Compile python libs in your env. ĂvaluĂ©Â Ă Â 4.
Le principal avantage est le gain de place, j'imagine que les performances restent les mĂȘmes.
Ăa peut ĂȘtre utile sur des environnements oĂč l'espace disque est limitĂ©, ou bien si tu as des Go de librairies Python (coucou Numpy & Cie) et que tu veux faire du mĂ©nage.
En somme trÚs peu utile dans le cas général. Mais ça prouve qu'on peut compiler du code Python.
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.
[^] # Re: A l 'Ă©poque il y avait Term Unit X :
PostĂ©Â par alberic89 đ§ . En rĂ©ponse au lien Le z80, c'est comique (attention Ă vos zylogmatiques). ĂvaluĂ©Â Ă Â 3.
En français, j'ai réussis à avoir les épisodes 1, 2, 4, 6, 7 et 8 de Ubunchu.
En anglais, on peut tous les avoir facilement ici et lĂ .
Il y a 10 sortes de gens dans le monde â ceux qui comprennent le ternaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.