fromtypingimportIterabledefsolve1(lines:Iterable[str])->int:"""Solve part 1 of today's puzzle"""forlineinlines:# There is actually only one line :-)foriinrange(4,len(line)-1):# ignore final '\n'iflen(set(line[i-4:i]))>=4:returnireturn0defsolve2(lines:Iterable[str])->int:"""Solve part 2 of today's puzzle"""forlineinlines:# There is actually only one line :-)foriinrange(14,len(line)-1):# ignore final '\n'iflen(set(line[i-14:i]))>=14:returnireturn0
Vous vous souvenez sans doute encore d'une petite phrase de l'intro :
To supply enough magical energy, the expedition needs to retrieve a minimum of fifty stars by December 25th. Although the Elves assure you that the grove has plenty of fruit, you decide to grab any fruit you see along the way, just in case.
importrefromcollectionsimportdequefromioimportStringIOfromtypingimportDict,List,Iterable,Iterator,MutableSequence,Sequencefromtyping_extensionsimportProtocolclassCrane(Protocol):defload(self,stacks:Sequence[MutableSequence[str]],labels:Iterable[str])->None:...defmove(self,orig:str,dest:str,n:int)->None:...deftop(self)->str:...classCrateMover:def__init__(self)->None:self.stacks={}# type: Dict[str, MutableSequence[str]]self.labels=[]# type: List[str]defload(self,stacks:Sequence[MutableSequence[str]],labels:Iterable[str])->None:forstack,labelinzip(stacks,labels):self.stacks[label]=stackforlabelinlabels:self.labels.append(label)deftop(self)->str:result=StringIO()forlabelinself.labels:result.write(self.stacks[label][-1])returnresult.getvalue()classCrateMover9000(CrateMover):def__init__(self,*args,**kwargs)->None:super().__init__()defmove(self,orig:str,dest:str,n:int)->None:orig_stack=self.stacks[orig]dest_stack=self.stacks[dest]for_inrange(n):dest_stack.append(orig_stack.pop())classCrateMover9001(CrateMover):def__init__(self,*args,**kwargs)->None:super().__init__()defmove(self,orig:str,dest:str,n:int)->None:orig_stack=self.stacks[orig]dest_stack=self.stacks[dest]temp_stack=deque()# type: deque[str]for_inrange(n):temp_stack.appendleft(orig_stack.pop())dest_stack.extend(temp_stack)defsolve(lines:Iterator[str],crane:Crane)->str:re_crates=re.compile(r'^\s*\[')stacks=[]# type: List[deque[str]]# First lines are crate stack descriptionsforlineinlines:ifre_crates.match(line):# This line describes stacked cratesfori,labelinenumerate(line[1:len(line):4]):ifi>=len(stacks):stacks.append(deque())stack=stacks[i]iflabel!=' ':stack.appendleft(label)else:# This line provides the labels of crate stacksbreak# Current line provides the labels of crate stackslabels=line[1:len(line):4]# We have enough data to load the crane with crate stackscrane.load(stacks,labels)# Next line is a blank ones=next(lines)# Next lines are crate moving instructionsre_instruction=re.compile(r'^move (\d+) from (.) to (.)$')forlineinlines:m=re_instruction.match(line)ifmisNone:raiseValueError("unrecognized input line")n=int(m.group(1))orig=m.group(2)dest=m.group(3)crane.move(orig,dest,n)returncrane.top()defpart1(data:Iterable[str])->str:crane=CrateMover9000()returnsolve(iter(data),crane)defpart2(data:Iterable[str])->str:crane=CrateMover9001()returnsolve(iter(data),crane)
fromtypingimportIterable,TupleimportaocclassInterval:"""An interval of integers"""def__init__(self,start:int,end:int):"""Create a new interval of integers, from start to end included"""self.start=startself.end=enddefincludes(self,other):"""Does this interval include the other one?"""returnself.start<=other.startandself.end>=other.enddefoverlaps(self,other):"""Does this interval overlap the other one?"""returnself.end>=other.startandself.start<=other.enddefimport_interval(s:str)->Interval:"""Import an interval from a string such as "2-4" """part1,part2=s.split('-')returnInterval(int(part1),int(part2))defimport_pairs(lines:Iterable[str])->Iterable[Tuple[Interval,Interval]]:"""Import a pair of intervals from a line such as "2-4,5-8\\n" """forlineinlines:part1,part2=line.rstrip().split(',')yieldimport_interval(part1),import_interval(part2)defsolve_both(lines:Iterable[str])->Tuple[int,int]:"""Solve both parts of today's puzzle"""inclusions=0overlaps=0fora1,a2inimport_pairs(lines):ifa1.includes(a2)ora2.includes(a1):inclusions+=1ifa1.overlaps(a2):overlaps+=1returninclusions,overlaps
#! /usr/bin/python3# Advent of Code 2022, day 2fromtypingimportIterable,Optional,TypeVar# '@' is not a valid item type, but it does no harm, and having it makes the# value of each item type equal to its index in this string. :-)letters="@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"priorities={letter:valuefor(value,letter)inenumerate(letters)}classRucksack:def__init__(self,left:str,right:str):self.left=leftself.right=rightdefanomaly(self)->str:forletterinself.left:ifletterinself.right:returnletterraiseValueError("no anomaly in this rucksack")def__contains__(self,letter:str)->bool:returnletterinself.leftorletterinself.rightdefimport_sack(line):n=len(line)-1# do not count final '\n'left=line[0:n//2]right=line[n//2:n]returnRucksack(left,right)T=TypeVar('T')defgroup(iterable:Iterable[T],n:int)->Iterable[list[T]]:result=[]# type: list[T]foriteminiterable:result.append(item)iflen(result)>=n:yieldresultresult=[]yieldresultdefpart1(lines:Iterable[str])->int:total=0forlineinlines:sack=import_sack(line)total+=priorities[sack.anomaly()]returntotaldefpart2(lines:Iterable[str])->int:total=0forline_groupingroup(lines,3):sacks=[import_sack(line)forlineinline_group]forletterinletters:ifall(letterinsackforsackinsacks):total+=priorities[letter]breakreturntotal
fromtypingimportIterable,Tupledefsolve_both(lines:Iterable[str])->Tuple[int,int]:# Symbol -> value for part 1values1={'A':1,'B':2,'C':3,'X':1,'Y':2,'Z':3}# Symbol -> value for part 2values2={'A':1,'B':2,'C':3,'X':-1,'Y':0,'Z':1}score1=0# for part 1score2=0# for part 2forlineinlines:char1,char2=line.split()# Values for part 1value1_1,value1_2=values1[char1],values1[char2]outcome1=((value1_2-value1_1+1)%3)*3# Values for part 2value2_1,result2=values2[char1],values2[char2]value2_2=(value2_1+result2-1)%3+1outcome2=((result2+1)%3)*3# We are player 2!score1+=value1_2+outcome1score2+=value2_2+outcome2returnscore1,score2
importcollectionsimportitertoolsfromcollections.abcimportIterable,SequenceimportaocclassPack:"""An elf backpack, containing a list of food items"""def__init__(self,items:Sequence[int])->None:"""Create an elf backpack containing the providing items (an item is actually an amount of energy, in calories)"""self.items=itemsdeftotal(self)->int:"""Return the total energy corresponding to the items in a backpack"""returnsum(self.items)defimport_packs(lines:Iterable[str])->Iterable[Pack]:"""Read input lines and return an iterator, yielding one elf backpack at a time"""items=[]# type: list[int]forlineinlines:ifline=='\n':# A newline separates the description of one backpack from the next# one. Therefore, a pack has been entirely listed and can be# yielded.yieldPack(items)items=[]continueitems.append(int(line))# The last pack has been entirely listed and we have to yield it too.yieldPack(items)
defpart1(lines:Iterable[str])->int:"""Solve puzzle part 1: determine the backpack containing most energy, and return the amount of energy it contains"""packs=import_packs(lines)returnmax(pack.total()forpackinpacks)
defpart2(lines:Iterable[str])->int:"""Solve puzzle part 2: determine the three backpacks containing most energy, and return the amount of energy they contain"""packs=import_packs(lines)totals=(pack.total()forpackinpacks)# Sort the energy totals so the greatest are at the end, and sum the three# last onesreturnsum(sorted(totals)[-3:])
Java Web Start : si je me souviens bien, ce n'est pas vraiment du web dynamique, ça, juste un mode de distribution de logiciels jetables. MĂȘme impression qu'avec Java.
PlutĂŽt que de stocker une liste de tous les poissons avec leur compteur interne, l'astuce est de plutĂŽt stocker, pour chaque valeur possible de compteur interne (de 0 Ă 8), le nombre de poissons qui ont cette valeur-lĂ .
#! /usr/bin/python3fishes=[0]*9# for each value of their internal timer, the number of fishes with that valuewithopen("6.in")asf:forwordinf.read().rstrip().split(','):fishes[int(word)]+=1fordayinrange(256):new_fishes=[0]*9fori,ninenumerate(fishes):ifi==0:new_fishes[6]+=nnew_fishes[8]+=nelse:new_fishes[i-1]+=nfishes=new_fishesprint(sum(fishes))
[^] # Re: En Python
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 6. ĂvaluĂ© Ă 3.
Ăa n'optimise rien du tout, si ?
Je veux dire, nous avons tous deux la ligne entiĂšre en mĂ©moire, mais lĂ oĂč j'en prends Ă chaque fois une tranche pour la convertir en ensemble et regarder sa longueur, tu enfonces un par un chacun de ses caractĂšres dans une file Ă taille limitĂ©e, que tu convertis en ensemble pour regarder sa longueur.
Quoique, ça évite une copie de chaßne à chaque étape, c'est ça ? La file à taille limitée étant persistante et ne copiant qu'un caractÚre à chaque fois.
# En Python
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 6. ĂvaluĂ© Ă 4.
Le fait que mes fonctions mangent un itérable de chaßnes vient des fonctions utilitaires que j'ai codées pour intégrer ça facilement. Ici, ça donne quelque chose d'un peu artificiel puisqu'il n'y a qu'une ligne à lire.
Je ne suis pas du tout satisfait par le fait de transformer Ă chaque fois un bout glissant de la chaĂźne d'entrĂ©e en un ensemble. J'aimerais bien faire quelque chose d'un peu mieux optimisĂ©, mais je n'ai rien de probant en tĂȘte.
[^] # Re: On va peut-ĂȘtre enfin y aller ?
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 5. ĂvaluĂ© Ă 3.
Au fait, avez-vous remarqué ce qu'on trouve dans la boutique de l'Avent du Code cette année ? On dirait qu'on va bientÎt changer de moyen de transport.
# On va peut-ĂȘtre enfin y aller ?
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 5. ĂvaluĂ© Ă 3.
Vous vous souvenez sans doute encore d'une petite phrase de l'intro :
Juste au cas oĂč, bien sĂ»r... Cette prĂ©caution commence Ă prendre du sens, vu que les lutins ont visiblement besoin d'ĂȘtre babysittĂ©s en permanence ! Quelle surprise, Ă se demander comment ils arrivaient Ă ramener ce qu'il faut les NoĂ«ls prĂ©cĂ©dents. Heureusement qu'on a pris de l'avance en collectant des fruits en Ă©toile au fur et Ă mesure !
Bref, j'ai l'impression qu'on arrive au bout de l'installation et qu'on va pouvoir partir en expédition dans la jungle. Et quelque chose me dit que ça ne va pas tout à fait se passer comme prévu.
Vous imaginez quoi pour demain ? Je verrais bien quelque chose à base de carte de zones plus ou moins dangereuses et de détermination de parcours optimisé...
[^] # Re: un bout de AWK
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 4. ĂvaluĂ© Ă 3.
C'est tout à fait ça. Mais à vrai dire, dÚs que le problÚme que je cherche à résoudre n'est pas un truc jetable, en particulier lorsqu'il s'agira de le montrer à d'autres ou de revenir dessus, j'utilise de moins en moins Awk.
Je trouve en effet que, sauf quand c'est vraiment trÚs simple, ça donne quelque chose de trÚs peu compréhensible à la lecture ou à la relecture.
# En Python
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 5. ĂvaluĂ© Ă 3. DerniĂšre modification le 05 dĂ©cembre 2022 Ă 11:37.
Ce qui est assez casse-pied dans ce problÚme, c'est que les données d'entrées sont dans un ordre qui est optimisé pour la lecture par un lutin grutier ou en l'occurrence une lutine grutiÚre.
Bref, voici le code :
# En Python
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 4. ĂvaluĂ© Ă 4.
En Python, en utilisant une classe dédiée (je trouve que ça se lit mieux ainsi) :
[^] # Re: un bout de AWK
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 4. ĂvaluĂ© Ă 5.
C'était en effet parfaitement taillé pour Awk !
# En Python, classieux
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 3. ĂvaluĂ© Ă 3.
[^] # Re: Déjà dans la rubrique liens
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au journal Office 365 et Google Workspace en difficultĂ© chez l'Ă©cole rĂ©publicaine. ĂvaluĂ© Ă 10. DerniĂšre modification le 02 dĂ©cembre 2022 Ă 15:33.
Oui : étudier sans informatique, sauf lorsqu'il s'agit d'apprendre la bureautique et l'informatique.
Sérieusement, les connaissances de compétences de base que l'école est censée transmettre n'ont pas changé depuis cinquante ans, c'est toujours lire, compter, calculer, réfléchir, puis pour aller plus loin, étudier des textes littéraires, résumer, raisonner, avec des bases en diverses sciences. Que des trucs qui se faisaient trÚs bien sans informatique, et qui peuvent toujours trÚs bien se faire sans informatique.
Je soupçonne mĂȘme que ces trucs se feraient sans doute mieux sans informatique.
L'informatique est indispensable lorsqu'il s'agit d'apprendre la bureautique. Ăa se fait sans problĂšme sous Google ni Microsoft. L'informatique est, en revanche, secondaire lorsqu'il s'agit d'apprendre la programmation, c'est important Ă rappeler. L'algorithmique et toute ça thĂ©orique, ça se fait sans ordinateur, en tout cas sans coder, donc sans problĂšme avec un tableau noir et du papier.
# En Python bref
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 2. ĂvaluĂ© Ă 4.
Toujours en Python, mais aujourd'hui, point de modélisation objet, c'est du concis, plus en mode calcul :
[^] # Re: En Python classieux
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 1. ĂvaluĂ© Ă 4.
(Oui, j'aime bien modĂ©liser avec des classes, mĂȘme quand ça n'a aucun intĂ©rĂȘt pratique.)
# En Python classieux
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au message Avent du Code, jour 1. ĂvaluĂ© Ă 4. DerniĂšre modification le 01 dĂ©cembre 2022 Ă 14:10.
Du code commun aux deux parties, essentiellement pour modéliser et importer les données :
PremiÚre partie, on veut le total de l'énergie du sac qui en contient le plus :
DeuxiÚme partie, on veut le total de l'énergie des trois sacs qui en contiennent le plus :
Je ne suis pas trÚs satisfait par le fait de trier les totaux, j'aurais bien aimé faire ça en parcourant simplement les sacs, mais je n'ai pas trouvé de façon élégante de le faire.
# C'est parti !
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au journal Calendrier de l'Avent du code. ĂvaluĂ© Ă 5.
Et voilà , cette année, le PÚre Noël a été invité par ses lutins à participer à leur récolte annuel de fruits étoilés destinés à nourrir les rennes et leur apporter l'énergie magique nécessaire à la tournée de Noël.
We wish you a merry Christmas and a happy hacking!
# Flash
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au sondage La pire tentative de web dynamique fut.... ĂvaluĂ© Ă 10.
Flash, mais aprÚs avoir hésité. Mon avis :
[^] # Re: le futur nous réserve bien des surprises !
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au journal Quelques joyeusetĂ©s que nous rĂ©serve le futur.... ĂvaluĂ© Ă 6.
MĂȘme constat pour le cĂŽtĂ© vidĂ©o et audio. Personnellement, je dĂ©teste ça, quand on me passe un enregistrement d'une confĂ©rence, je cherche tout de suite Ă savoir s'il n'y en a pas une transcription.
Mais en revanche, je maintiens que j'ai toujours l'impression de subvocaliser quand je lis. Comme quand je pense d'ailleurs.
[^] # Re: le futur nous réserve bien des surprises !
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au journal Quelques joyeusetĂ©s que nous rĂ©serve le futur.... ĂvaluĂ© Ă 4.
C'est trĂšs curieux, personnellement j'ai bien l'impression de prononcer dans ma tĂȘte, mais beaucoup plus vite que si je lisais Ă voix haute. D'ailleurs, j'ai une vitesse de lecture plutĂŽt rapide, comparĂ©e Ă celle des gens avec qui j'ai pu comparer. Et ça me permet de lire des textes longs et complexes en les comprenant bien.
Mais Ă cĂŽtĂ© de ça, j'ai entendu parler de lecture rapide, une technique de lecture sans prononcer dans sa tĂȘte, qui serait bien plus rapide. J'ai essayĂ© un peu, mais je n'ai pas accrochĂ©, sans doute pas assez pour bien me rendre compte. Pour le peu que j'ai fait, ça m'a justement donnĂ© l'impression de survoler un texte sans bien rentrer dedans, c'est trĂšs curieux.
[^] # Re: Ardoise magique
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au journal J'ai testĂ©: une ardoise Ă cristaux liquides. ĂvaluĂ© Ă 3. DerniĂšre modification le 29 novembre 2022 Ă 17:54.
Non rien.
# Ardoise magique
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au journal J'ai testĂ©: une ardoise Ă cristaux liquides. ĂvaluĂ© Ă 8.
Je me demande s'il n'existe pas un truc plus low-tech qui rĂ©pondrait au mĂȘme besoin: l'ardoise magique. C'est un jouet pour enfants, mais la fonctionnalitĂ© a l'air d'ĂȘtre la mĂȘme, non ?
[^] # Re: le futur nous réserve bien des surprises !
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au journal Quelques joyeusetĂ©s que nous rĂ©serve le futur.... ĂvaluĂ© Ă 7.
Ăa l'est certainement, et c'est une bonne idĂ©e, c'est encore plus lisible sans souffrir d'une impression de redondance. Et c'est tout Ă ton honneur, parce que ça demande encore plus de temps pour Ă©crire ainsi. Ăa ne doit pas ĂȘtre Ă©vident pour que les phrases n'aient pas l'air trop impersonnelles ou mĂ©caniques je pense.
[^] # Re: le futur nous réserve bien des surprises !
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au journal Quelques joyeusetĂ©s que nous rĂ©serve le futur.... ĂvaluĂ© Ă 10.
Il y a plusieurs formes d'Ă©criture inclusive, tout de mĂȘme. Notamment :
La premiĂšre consiste, pour l'auteur ou l'autrice, Ă Ă©conomiser du temps â et encore, il n'est mĂȘme pas certain que cela en fasse gagner â en le faisant payer aux lectrices et lecteurs. Parce que, pour la plupart des gens, lire, c'est prononcer dans sa tĂȘte, tout de mĂȘme, et un truc comme « heureuâ xâ ses », eh bien ce n'est pas prononçable, il faut d'abord faire une Ă©tape de dĂ©veloppement ou d'Ă©limination d'une des deux alternatives dans sa tĂȘte.
La seconde consiste Ă prendre le temps d'Ă©crire quelque chose de lisible. Je trouve ça bien plus respectueux. Et tout aussi inclusif, pour ceux qui se poseraient la question : « heureuses et heureux », ça veut dire la mĂȘme chose que, sauf que c'est grammaticalement et orthographiquement correct et que ça se lit directement sans aucune difficultĂ©.
Je n'ai pas lu cette nouvelle, mais on parle de quelle forme d'Ă©criture inclusive au juste ? La version optimisĂ©e pour l'auteur ou l'autrice ou celle optimisĂ©e pour la lecture ? Avec un soupçon de mots inventĂ©s peut-ĂȘtre ?
C'est un peu comme lorsqu'on appelle quelqu'un et qu'on tombe sur son répondeur, deux options possibles :
[^] # Re: Ada corse le tout
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au journal Calendrier de l'Avent du code. ĂvaluĂ© Ă 5.
C'est expliquĂ© dans leur annonce, Ă©videmment il faut montrer le code pour chaque casse-tĂȘte.
[^] # Re: Ada corse le tout
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au journal Calendrier de l'Avent du code. ĂvaluĂ© Ă 4.
Ăa, c'est typique des problĂšmes avec une rĂ©solution intuitive pas optimale, et qui devient intenable pour la seconde partie.
PlutĂŽt que de stocker une liste de tous les poissons avec leur compteur interne, l'astuce est de plutĂŽt stocker, pour chaque valeur possible de compteur interne (de 0 Ă 8), le nombre de poissons qui ont cette valeur-lĂ .
# Seulement un décalage ?
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse Ă la dĂ©pĂȘche Nouveaux prĂ©fixes SI et avenir de la seconde intercalaire. ĂvaluĂ© Ă 6.
Si je comprends bien, la valeur d'une seconde UT1 est variable. Parfois plus courte que celle de la seconde UTC, parfois plus longue.
Avec une dĂ©finition commune du jour (24 heures de 60 minutes de 60 secondes), ces deux temps se retrouvent normalement en dĂ©calage. Pour le moment, on a toujours gĂ©rĂ© des cas oĂč UTC Ă©tait en avance sur UT1, et on l'a recalĂ© en lui ajoutant une seconde de temps en temps.
On parle donc d'une simple translation d'UTC. C'est bien si la durée de la seconde UT1 reste en moyenne assez proche d'une seconde UTC. Mais si, disons, la rotation de la Terre diminue pendant un moment, c'est plus qu'un simple décalage, qu'il faudrait, c'est une modification de la définition de la seconde.
En somme, au lieu d'ajouter ou de retirer une seconde de temps en temps, on parle d'ajouter ou de retirer un paquet de secondes à un moment donné, c'est ça ?
[^] # Re: l'Avent, qui commence au 1er décembre ?
PostĂ© par đČ Tanguy Ortolo (site web personnel) . En rĂ©ponse au journal Calendrier de l'Avent du code. ĂvaluĂ© Ă 4.
C'est vrai, ça commence ce dimanche. Seulement, comme la quasi-totalité des calendriers de l'Avent, celui-ci commence le 1er décembre, c'est dans doute plus facile ainsi pour son auteur.
Avec ou sans la virgule, la phrase reste ambiguë, elle peut se comprendre comme signifient que ce calendrier commence le 1er décembre, ce que j'ai bien sûr voulu dire. Et elle peut se lire comme vient dire que l'Avent commence le 1er, ce qui est faux.