Live coding Advent of Code et algos
Session du 14 décembre 2023 à 20h00
Pratique & Live Coding
Développement Web & Frameworks
Veille & Discussions
Librairie Standard & Modules
Deviens membre Premium
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- +100h de formations
- +180 exercices de code
- +100h de mentorats en rediffusion
- 20 projets
- Mentorats groupés hebdomadaires
- Support individuel avec nos mentors
Live coding Advent of Code et algos
Dernière session de l'année !
On va réaliser une petite session de "live coding" en réalisant le premier exercice de l'Advent of Code.
Cette dernière session sera également l'occasion de poser vos questions.
On parlera également du nouveau projet du mois (Système de gestion de forums).
00:00:00 :Pas de soucis je crois qu'en fait je suis en train de regarder mais je medemande si c'est pas le... je pense qu'il n'y a pas le www en sous-domaine
00:00:07 :c'est probablement pour ça.Ah oui, c'est vrai que sur le lien que tu m'as envoyéc'est juste un tlps //meetOui, parce que du coup ça faitpour ceux qui ne le savent pas du coup petit moment un nom de domaineparce que meet est déjà un nom de domaine de Google donc si on met
00:00:26 :je pense que si on met www, parce que le 3w est aussi un sous-domaineen fait, ça aussi on ne le sait pas maisc'est...
00:00:34 :vous pouvez ne pas avoir de sous-domaine donc par exemple docstring.frvous pouvez avoir le sous-domaine classique qui est www.et puis après vous pouvez avoir tout ce que vous voulezclub ou n'importe quoiBon alors du coup avec le bon lien c'est bon.
00:00:51 :Ouais ok, super.Alors attendez, il y a encore des gens qui arrivent.Hello, hello tout le monde.J'étais en train de parler du coup de l'advent of codeet du fait que je n'étais pas super fan de ces trucs là en général.
00:01:05 :Bonjour tout le monde.Salut Salvatore.Ouais parce que ça rejoint un peu ce que je vous ai montré là sur le Tozalà j'ai fait, finalement je vous en avais parlé un petit peu làj'ai fait moi-même le test.
00:01:18 :Ça va, heureusement j'ai eu un bon score.Mais c'est quand mêmec'est pas, enfin je sais pas, il y avait des questionspar exemple il y avait une question, le fameux truc sur des graphesalors, et en plus c'est chronométréalors là je dois avouer que je pense que si j'avais vraiment passé une demi-heure sur le truc
00:01:39 :j'aurais peut-être pu réussir à quelque chose.Ça aurait probablement pas été du tout optimalmais en gros il fallait, là on rentrait pile dans les trucs d'algorithme que je détesteet que j'ai jamais utilisé de ma vie pour faire des sites ou quoi que ce soitoù il fallait remonter des graphes de façon optimale.
00:02:00 :Enfin ça avait pas besoin d'être optimal dans l'exercicemais bon j'imagine qu'après on peut faire le truc et ça prend trois plombeset puis il y en a qui aiment bien justement faire des exercices comme ça pour optimiseret c'est intéressant dans certains domainesmais voilà, personnellement j'ai jamais eu besoin de faire ça
00:02:14 :il y a plein de domaines dans lesquels on n'a pas besoin de faire des algorithmes comme çaet d'ailleurs c'est pour ça que je trouve aussi un peu, pas stupidemais c'est que c'est presque un domaine en soic'est-à-dire que vous pouvez apprendre des algorithmes de tri des algorithmes
00:02:27 :pour parcourir des graphes etc.et ça devient presque un petit peu automatique au bout d'un momentlà vous savez les façons de faire pour justement faire de la récursivitéremonter dans des arbres de façon optimale les algorithmes qui existent etc.
00:02:40 :Donc finalement c'est une branche assez typiquemais qui peut servir dans certains cas de figure et absolument pas dans d'autrespersonnellement en presque dix ans de code j'ai jamais eu besoin de faire çamais voilà, du coup le test Toza était quand même pas trop malil y avait des trucs assez sympas
00:02:56 :et sur l'Advent of Code je pense que c'est un petit peu pareildu coup je vais aussi vous montrerparce qu'on a fait, pour ceux qui ne sont pas intéressés sur le serveur Discordon a fait une partie spécifique pour çaet je vous invite à continuer même à faire ça
00:03:20 :attendez je vais vous partager mon écranje fais un peu de ménage dans tous les ongletsoui je vous invite à regarder parce que par la suite ça peut être des trucs aussiça peut être des trucs, enfin pas tous comme je vous dis, certainsça peut être des trucs intéressants à regarder
00:03:39 :attendez j'ai mon ordi qui plante un petit peualors est-ce que j'arrive à partager çaoui ok comprisalors on va y arriverhop okalors partager l'écran complet icialors est-ce que vous voyezvoilà et sur le Discord du coupdonc il y a une partie Advent of Code
00:04:21 :je vous dis ça parce qu'on va la laisser ouverte par la suitedonc si jamais il y en a qui veulent le faire après le mois de décembren'hésitez pas, n'hésitez pas à aller voiril y a des trucs pour chaque journous on va faire du coup celui-là ce soir
00:04:40 :que je trouvais assez intéressant quand mêmeparce que justement c'est pas trop compliquéet ça fait de la manipulation de donnéesdonc je vais vous montrer à quoi ça ressemblejour 1ils avaient même mis les énoncés iciouais ils les ont traduits en français c'est coolfranchement ils ont fait un super boulot
00:05:02 :oui je vais agrandir un petit peubien vuhop alors est-ce que c'est mieux comme çaet donc alors je regarde un peu le chatouais ouais on en parle souvent ouiProdalgo oui c'est ça il y a des gens qui sevous en voyez peut-être passer sur Twitter
00:05:25 :un gars assez connu qui travaillait à Codingamequi est assez jeune d'ailleurs qui a 25 ans làMathis Hamelça peut être intéressant pour ceux qui s'intéressentd'aller voir son contenu je crois qu'il s'appelle comme çasur Twitterou lui voilà c'est vraiment le genre de personnesqui adorent faire de l'algo pur je dirais
00:05:43 :où justement ils vont passer des heuresà essayer de trouver la façon la plus optimalede faire un trucpersonnellement voilà comme je vous dis ça dépend de votre objectifc'est sûr que si vous faites des trucssi vous travaillez chez OpenAIc'est probablement quelque chose que vous faites un peu plus
00:05:57 :si vous faites des sites webc'est pas généralement le genre de chosesqui va être super utilevaut mieux comme on l'avait vu dans d'autres mentorasvous concentrer sur par exemplele langage de requête de Djangooù là il y a des trucs intéressants à voirsur la manipulation de USQL
00:06:13 :des bases de données où là effectivement il y a des trucsà savoir pour l'optimisation et c'est souventplus une question de connaîtreles bonnes façons de faire et les bonsles bonnes méthodesles bonnes fonctions à utilisercomme prefetch relatedou select related pour ceux à qui ça dit quelque chose
00:06:29 :on l'avait vu dans un mentora précédentil y a un mois ou deuxdonc voilà c'est plus que de savoir fairedes trucs compliqués c'est plus d'avoir étéconfronté à ça pour savoir la bonne façon de faireet c'est toutdonc là voilàcomme je vous dis je suis pas souvent
00:06:45 :trop fanj'avais eu la même chosedans le Tozacomme je vous disais des énoncés un peu comme çadonc là ils font la thématique en plus de Noëldonc où il y a des pavés de texteoù finalement ils font un scénario un peuloufoque pourintroduire un exercice
00:07:05 :donc on va regarder tout çajuste avant je voulais vous parlerdu projet du mois donc je l'ai misoui le scénario est un peubizarre j'ai pas regardé les autres mais j'imagine que c'estun peu du même à Camilleje voulais vous parler avantjuste avant d'abord d'essayer de rentrer dans le vif du sujet
00:07:21 :du projetentre guillemets mensuelpuisque comme vous avez dû le voir làça s'étend encore un peu pluslà j'ai mis une date de deux moispresque jusqu'au 29 févriervu qu'il y a les fêteson a déjà Gab qui a je crois que tu asmis ton projet ici
00:07:39 :t'as même mis à jour c'est coolt'as même mis à jouravec le projet Django et t'as tonCLIj'ai mis le CLI et quand tu cliques sur le dépôt guidej'ai mis la versionok superparce que voilà je pense quec'est cool quet'aies mis ça à disposition si y'en a qui veulent
00:08:01 :voir un petit peuil a déjà fait un truc super complet Gab là en CLIqui marche bien qui est super coolje sais pas si t'as mis une petite image quelque partmaisc'est avec Typer je croissuper richc'est assez coolet là du coup Gab il est parti sur la version Django
00:08:19 :et je vous invite vraimentsi vous allez voir donc là je vous ai misquelques fonctionnalitésà faire, des fonctionnalités avancéesquelques petites aides et conseilsle mieux c'est d'en parler dans la communauté là sur Discordsi vous voulez commencer pour échangerlà dessusGab pourra probablement vous en parler aussi
00:08:37 :puisqu'il a quand même pas mal avancé aussipour vous faire un petit retour d'expérienceet c'est commeje l'avais évoqué un projet qui peutvraiment être fait soitjuste en command line même si vous faites pasjustement del'Orient Objet, pour l'Orient Objet c'est super intéressantcomme Gab je crois que tu l'as fait
00:08:55 :mais même sans Orient Objety'a moyen de faire des choses un peucomme avec la liste de course où vous allez tout stockerun peu dans unegrosse liste ou un gros dictionnaireoù vous pouvez stockerun peu comme une base de donnéesc'est ce que t'as fait d'ailleurs je crois avec TinyDB
00:09:11 :qui est en fait justeune base de données qui est stockée en format JSONet vous pouvez stocker tout ce quevous voulez donc soit dans un seul gros dictionnairesoit dans plusieurs dictionnaires pour stocker par exempleles utilisateurs, lesforums, les messages avec des IDsvous pouvez vraiment vous amuser pour
00:09:27 :refaire un petit système comme ça soit avecdes bases de données comme TinyDB, comme SQLitesoit carrément juste avec du JSONpour pourquoi pas refaireun petit système de clés primairesy'a plein plein de trucs à fairedonc comme d'habitudec'est assez libre et sivous avez le syndrome de la page blanche
00:09:45 :comme c'est souvent le cas, comme quand j'en parleavec les étudiantsqui commencent pas les projets parce qu'ils se disentje sais pas par où commencercommencez par écrire juste en françaisce que vous pouvez faire, faut vraimentpas hésiter à pas essayerde forcément tout de suite rentrer dans le code mais de se dire
00:10:01 :ok bah on va prendre les fonctionnalitésclés ici, on va les écriresur un autre pad ou mêmepar écrit sur un bloc notephysique si vous souhaitezet commencer à détailler, voilà, inscription, condition desutilisateurs, donc qu'est-ce que je vais avoir besoin de fairebah je vais devoir créer des utilisateurs
00:10:17 :avec des noms, donc détailler tout çafaites-vous un gros plan comme ça et vous allez voir queplus vous allez décomposer le truc plusvous allez pouvoir voir des choses que vous allezpotentiellement pouvoir faire, comment créerun utilisateur, bah tiens ça je vais peut-être avoir une variablecomment la variable je peux la stocker quelque part
00:10:31 :vous allez penser au dictionnaire, etc.donc faut vraiment commencer comme çaet puis trouver un point d'entrée pour commencer à fairequelque choseet oui bah tu peux y aller Gab pour les questionson va commencer par ça et puis après on va voirdu coup le advent of code
00:10:47 :on va commencer par cette partiesur le forumles questionsalors la gestiondes utilisateurs par forumj'ai créé un modèle intermédiaireje sais pas si t'as letu as le CLI du coupnon non, là je suis sur lepar exemple le Djangodonc sur la plateforme project
00:11:11 :c'est dans forumvoilà et làj'ai le modèleet làj'ai fait un modèle intermédiaireen fait chaque fois etils auront un formulaire à remplir pour pouvoir en faitêtreavoirun account forumoui c'est ce que tu me disaisoui que t'as fait unutilisateur pour les
00:11:39 :ouit'as fait deux utilisateurs c'est ça un utilisateurouais en faittu t'inscris donc j'ai mis l'application accountdonc tu t'inscris comme un utilisateur normalet en fait t'as pas besoin d'avoir plusieurs comptessi tu veux sur la plateformeil faut juste en gros que tu activeun compte sur forum
00:11:57 :ok ok oui oui je vois ce que tu veux faireoui okt'as fait une clé étrangèrec'est bien ououi oui ça ressembleun petit peu à ce qu'on pourrait faire avec un modèlede profil en faitjustement que tu veux séparerje pense que oui c'est pas
00:12:15 :une mauvaise idée deséparer les choses sachant quece que ça te donne comme flexibilitéet là tu vois c'est vraiment un choixde design je diraisc'est que là ça te permet potentiellementde supprimer un des comptes et pas l'autredonc si tu voistu pourras avoir un compte principal
00:12:33 :et puis après avoir plusieurs comptessur différents forums et après tu peux supprimerenfin ton compte sur chaque forumc'est ça ouaisfinalement je réfléchis surdiscord c'est un peu ça finalementje crois que t'as un compte plus ou moinsprincipal avec des préférences génériqueset après sur chaque serveur discord
00:12:51 :tu peux setter un nom d'utilisateur qui va être différentdes avatars qui vont être différentsl'avatar je sais plus à quel niveau c'estdonc ouais je pense que c'est bien de séparer comme çacomme ça tu peux vraiment avoirle contrôle sur les deuxc'est ça en fait chaque administrateur aura le contrôle
00:13:05 :de son forumet ça touchera pas le compte principal de l'administrateurouais ouais ouaisje pense que c'est effectivement la meilleure façonde faire ouaisj'ai encore deux questions du coupdonc ça c'est bonensuite la gestion des permissionsc'est un truc un peu comme il y avait à l'époque
00:13:23 :sur PHP et puis il y a un genre administrateurmodérateur et puis le mecc'est normal quoi l'utilisateurj'ai l'impression du coupque en faitla personne c'est dans le modèlede forumalors dans le modèleforumalorsj'ai encore aussiforum ouais modèleforum ok ouaisen fait tu vois donc ça c'est vraiment le forum
00:13:55 :la personne va cliquer surcréer un forumil y aura ça et après il y a tout ce qui est catégoriesqui est dans l'autre fichier modèlequi va se créer avec le brefil y a plusieurs fichiersc'est quoi ma questionc'est la gestion des permissionstu peux pas du coup utiliser
00:14:13 :ce qui est inclus dans Djangoc'est compliquéje pensais du coup faire un grosun modèle administrateurdans le genreet on va après faire des conditionsadministrateur je peux supprimerje sais pas troppour ça en fait il faut regarderles groupesparce que ça c'est quelque chose
00:14:35 :c'est pour ça que je vous conseillais çatu peux l'utiliser à la fois du côtéde l'administrationdans l'administration de Djangoet à la foisdans ton codeici parce quetu vas avoir des trucs par exemplecomme tu vas avoir un utilisateurpoint tu vas récupérer les groupes
00:14:55 :dans lesquels il esttu vas pouvoir vérifier par exemple s'il a un groupesi le groupe a telle permissionje crois que c'est hasperm un truc comme çaou permissionje sais plussi tu regardesça va êtreDjango groups and permissionsah non c'est un mediumj'ai du mal à comprendre
00:15:17 :et à voir comment je peux l'utiliserc'est vraiment ton codepourtant ça n'a pas l'air compliquéalorst'as les groupesparce que groupec'est un modèle en soic'est un modèlec'est pour ça que t'as pas besoin de le créeren faitje sais plus il est dans quoi
00:15:39 :il est dansgroupevoilà c'est çadjango.country.auth.model.groupc'esttu vois une façonje vais mettre en français tant qu'à faireoù est-ce qu'il estpermissionvoilàc'est une manière générique de segmenter les utilisateursdes permissions, les désigner par nom définiet t'as tout un systèmequi est fait justement tu vois
00:16:07 :où tu vas pouvoir donner des permissionsça va être notammentet tu peux t'en servir de différentes façonsça va être au niveau de l'administration par exemplec'est là que ça peut être intéressantc'est que si tu donnes accès à l'interfaced'administration de Djangoaux gens qui créent des forums
00:16:23 :tu peux vraiment facilementet de façon native limiterce qu'ils vont pouvoir voirdonc ils pourront littéralement aller dans l'administrationtu pourrais afficherjuste leur forum, juste afficherce qu'ils peuvent ajouter, modifiercomme ça par exemple ils pourraient pas afficherils pourraient pas supprimercertaines choses mais ils pourraient en éditer d'autres
00:16:43 :etlà tu voist'as tout ce qu'il faut là-dedansnormalement, j'essaie de voir ce qu'ils disentvoilà tu vois tu vas avoir des permissions comme çauser permissions, tu peux ajouter des permissionstu vois has permissionest-ce qu'il a la permissionde changer le blog post etcdonc ça peut être
00:17:03 :une façon sansréinventer la roue de vérifierce genre de chosespar exemple tu vois tu pourras avoirdonc là par exempleici ils ont mis blog postpar exemple si t'as un modèle messagetu vas pouvoir créer un groupeadministrateur par exempleun groupe forum administrateurqui va avoir comme permission
00:17:27 :de changer un messageet pas de le supprimeraprès tu peux avoir un autre type d'administrateurqui lui va avoir le droit de changer et de supprimerun message tu voiset ça ça va être donctout ce qu'il fautje sais pas à quel point la doc est bien
00:17:43 :bienexplicative en soiil faut aller chercher d'autres tutosj'en ai pas fait là dessus vraiment sur docstreamdonc faudrait, je vais essayer de trouver des ressourcesj'ai du mal à me faireaprèsje vous disais ça parce que je penseque ça peut être un bon moyen de regarder ça
00:18:03 :c'est un truc qui est justementtrès complet peut-être tropjustement doncsi tu veux pas trop t'embêter au début tu peuxaller sur un truc simple comme tu l'as fait sur tes autres projetsavec juste de la vérificationtu vois un peu en terme de sécuritédonc juste quand tu vois tu édites
00:18:19 :une vue vérifier que la personneelle a la possibilitéde le faire donc par exemple tu peux juste filtrerest-ce que la personne elle est super utilisateurou admin ou des trucs simplescomme ça ou est-ce qu'elle est l'auteur du postesi c'est un truc de modification par exemple
00:18:33 :donc par exemple si t'as une vue qui vapermettre d'éditer un poste tu fais une vérificationest-ce que la personne est l'auteur du posteou est-ce que c'est un super utilisateurdans ce cas là tu lui permets de modifiersinon tu fais une erreur 404ou quelque chose du genre
00:18:47 :je vais te faire un truc bien completje vais me le mettre en 3d en faitouais ouais ouais mais c'estje te dis regarde çaregarder ça je vais essayerde voir sic'est l'occasion de regarder cette partie làaprès je comprends quet'as aussi envie d'avancer sur le projet
00:19:05 :donc c'estaprès tu vois le temps que tu peux mettre aussiparce que le problème c'est que si tu créesdes groupes pour tous les forumsje sais pas si tu vois ce que je veux direc'est ça que j'ai pas compris en fait avec çac'est que vous voulez que les gens aient des permissions différentes
00:19:19 :selon les forums, il peut être admin sur l'unil peut être utilisateur sur l'autre, il peut être modérateur sur l'untu vois ce que je veux dire ?
00:19:25 :oui après c'est ça, tu peux avoir un truc générique justementoù tu fais un système de permissions générique pour tous les forumsc'est à dire que tu disil va y avoir un rôle administrateurun rôle modérateurun rôle je sais pasd'autres idéesde rôle qu'il pourrait y avoir
00:19:41 :mais tu vas faire des groupes comme çadonc un groupe admin, un groupe modérateurun groupe mentor par exemplequi vont chacun avoirdifférentespermissions, donc justement tu vas direl'administrateur il a la permission de fairequasiment tout, presque comme unsuper utilisateurle modérateur il vapouvoir tout modifier mais rien supprimer
00:20:03 :tu vois, et après c'est làoù je te dis que c'est intéressantpar exemple tu vois ici là t'as un décorateurpermission requiredt'as juste à dire, donc par exemple tu pourrais avoir ton modèlemessage, alors làadchoice j'imagine ils ont faitun truc spécifiqueah non, choice c'est ça
00:20:21 :choice ça va être un champen fait tu vois c'est ça, c'est ça qui ditc'est que t'astout qui est déjà défini ici, t'as l'étiquettede l'application, donc par exemple. et le code de la permission
00:20:33 :donc t'aschoice ça va être lechamp, et puis addremove, edit, etcet tout ça estcréé automatiquement, c'est pas toi qui as besoin de créer ces choses làdonc en fonction du nomde ton modèle et du nom du champ, tout ça va êtrecréé automatiquement, et après du coup tu peux utiliser
00:20:51 :ton décorateur et dire bah voilàtelle vue, elle va êtreaccessible uniquement pourtel groupe et puispour les personnes en particulier qui ontlà t'as pas besoin de cibler le groupe, justement tu vas diretous les groupes qui ontl'autorisation depar exemple d'éditerle champ messagele champ contenu sur mon modèle message
00:21:13 :tu vois, donc je vous le mets dans lebrefje vais vous le mettre dans le chat, donc çaferait un truc du genremessage.add
00:21:23 :on va dire editcontentt'auras un truc comme ça, donc tous les gensqui ont, qui sont dans ungroupe qui a cette permissionparce qu'après tu vas, attends je vais essayer de te le montrersur docstring ce que ça peut donnerau niveau dedes groupesdu coup une personne qui est dans un groupe ça va être uniforme
00:21:43 :pour tous les forums, ça je dois dire, non ?OuiOui bah aprèsc'est ça, après c'est oui mais je pense que çat'sais je réfléchis justementsur les trucscomme phpbb, là t'avaisdes groupes pardéfaut, après je pense que tupeux ajouter tes proprestrucs par forum, c'est là où
00:22:05 :tu vois il peut y avoir des systèmes, tu peux avoirun premier système très générique de comme je te disadmin, modérateurprof, je sais pas ça dépend de ce quetu veux faire, et aprèstu vois quelque chose où tu pourrais faire quelque chosede beaucoup plus personnalisé en disant
00:22:19 :mais là je pense que c'estje réfléchis là c'est vraiment si tuenfin je penseque je sais même pas si t'aurasle temps d'aller à ce niveau là de personnalisationdans ton projet tu voisparce que là ça voudrait dire que vraiment chaque forum pourrait êtrepersonnalisé à un point où t'aurais par exemple
00:22:35 :des je sais pas desmodèles très spécifiquesqui font qu'il y aurait des permissionsspécifiques à un trucspécifique tu vois, je pense que ça peutrester assez génériqueattends je vais essayer de te montrer sur docstringce que ça donneouais ouais c'est çac'est vraiment parfaitc'est vraiment parfait
00:22:57 :par exemple ici tu voisdonc moi sur docstring là j'ai un trucaide formateur et puis moi je peux diresur mon modèle formation il va pouvoirchanger, ajouter, supprimervoir les tagset ça je pourrais modifier pour direvoilà dans tousles trucs qu'est-ce qu'il a le droit de faire ou de pas faire
00:23:15 :etça je pense comme je te disfaut vraiment le voirqu'est-ce qui est génériquequ'est-ce qui va être générique dans les autorisations sur ton forumje pense qu'il y a quand même beaucoup de choses qui peuvent être génériquesdans des rôles que tu vas donner aux genset tu peux te baser là dessus
00:23:31 :après pourmodifier ou non la modificationde ton applicationparce que ton application tu vois elle va êtrequand même définietout ce qui va être possible de faire sur ton applicationsur ton forumça va être représenté par desmodèles, tout ce quiva êtrepérennedans l'application, les forums
00:23:55 :le forum en tant que tel, les catégoriesles messagesles membres, tout çail y a des modèlesaprès c'est le fameux crudecreate, retrieve, update, deletedonc c'est pour ça que tu vois ça reste quand même des chosestrèsgénériqueset après tu peux dire dans tout le
00:24:15 :contenu de mes forums, qu'est-ce que les gens peuvent faireles gens vont pouvoircréer des catégories, il y a des gens qui vont pouvoirmodifier des messages, il y a des gens qui vont pouvoirsupprimer des utilisateurset après ça va êtreune gestion de toutes ces permissions là
00:24:29 :dans ton applicationc'est là que c'est intéressant c'est que du coup mes forums à l'autremême personne peut avoir différents rôlesoui c'est çaaprès là tu voisça fait partie des chosesqu'il faut définir après dans ton applicationc'est vrai que je laisse ça assez libre, je ne fais pas un cahier des charges
00:24:45 :non plusc'est sûr qu'il y a un certainniveau où il faut décidervous qu'est-ce que vous allez permettrede fairemais là ce niveau làje ne peux plus me servirce qui est inclus à Django c'està moi de faire un truc personnalisési je fais des
00:25:05 :permissions pour chaque forumpour faire en sorteque chaque utilisateurpeut avoir des permissions différentesça va le faireça va le gérerc'est qu'il faut qu'il fasse un systèmealors soit tu peux le faire comme là je te l'ai montrétu vois dans ledans l'adminsi je l'ai
00:25:27 :soit tu donnes accèsen fait directementà tes utilisateurs à l'admin et comme je te disc'est ça qui est intéressant c'est queà moins que l'utilisateur soitsuper utilisateur auquel cas il va voiren fait touttous tes modèles et il va pouvoir tout fairesinon qu'est-ce qu'il va faire
00:25:45 :qu'est-ce qu'il va voir quand il va pouvoirquand il va accéder làc'est ce quetu lui as mis ici et le seul tructu vois où je me dis qu'il faudra faire probablementquelque chose d'un peu custom c'estles forumsc'est pour ça que ça je suis pas sûr
00:26:01 :effectivement que ce soitune bonne façon de le fairedirectement depuis l'interfaced'admin de Djangoparce que là il va falloir restreindrecomment direparce que si tu lui metstu vois si tu lui metscommecommepermission icimême juste l'édition à forumil va voir tous les forums de tout le monde
00:26:29 :donc là il faudrait qu'il voit uniquement son forumet là je pense pas que tu aies ce niveau de granularitéet là je pense que c'est possibleje pense en overrideant des méthodesdans l'admin de Django pour lui direpar exemple dans mon modèletu vois dans les groupes ici
00:26:43 :par exemple là imagine c'est une liste de forumstu vas afficher que les forumsdans lesquels l'utilisateur se trouvepour pas qu'il ait accès à tous les forumset qu'il puisse modifier tous les forums de tout le mondedonc aprèsça effectivement c'est quelque chose que tu pourrais faire
00:26:57 :directement tu pourrais faire tes propres vues d'adminpour en plus avoir quelque chosed'un peu peut-être plus beau que l'interfaced'administration de base de Djangomais ouais ça faudrait voircomment faire maisouais ouais ouais c'est ça je pense que ouic'est mieux de faire comme çapour avoir quelque chose de plus
00:27:21 :intégré justementaussi avec ton interface pour que ce soittout dans ce que t'as faitque t'es un truc adminet puis tu ailles là-dedansdirectementaprès tu vois c'est vraiment l'occasion d'apprendreparce que ça c'est quand même quelque chosed'assez bien faitet utilisé donccomme je te dis il n'y a pas besoin de réinventer
00:27:51 :la roue donc c'est intéressant à connaîtrevraiment je pensealorsest-ce que c'est tout bonalorson vaaccepterMoïse qui vient d'arriversalut Moïseil est làhelloalorsdonc voilàalors effectivement je ne sais pas sije pense pas qu'il l'aittraduitalors on va aller voir notre chère traduction
00:28:37 :que nous ont faitmonsieur raclettesur discordalors est-ce quedans le chat il y en a combienqui ont essayé ou réussivous pouvez dire si vous avez essayéou réussiet je vais ouvriralors attendezça importele codetutovoilàalorsréussissans les regexok
00:29:29 :ok alorsnormalement vous devriezah nonj'ai partagé juste l'ongletje vais partager l'écranalorsscreenvoilàouais effectivementc'est un bon trucpour les regex si je me souviens bienmoi je l'ai d'ailleurs pourvous dire, j'ai vul'énoncé, j'ai pas fait l'exercicehop où est-ce qu'il est
00:30:01 :discorddonc je l'ai pas fait, je me suis dit que ce serait comme çaréel pourvous montrer aussi, parce que c'est ça que j'aime bien, vous montrer aussile chemin de réflexionde comment on peut aborder çajustement comment on peut dépasser la page blancheet comment on aborde un projet comme ça
00:30:17 :doncje vais le copier comme çaj'aurai toutdans mon trucici, voilàalorset commentworldwrap je pensepasdonc quelque chose ne va pasavec la production mondiale de neigehopok je vais pas me le mettre à la lignealors quelque chose ne va pasavec la neige, vous avez été sélectionné pour y jeter un oeil
00:30:51 :les elfeshopvoilàils vous ont même donné une carte dessusils ont utilisé des étoiles pour marquerouais de rencontrerdes problèmes, vous faites celahopet vous devez vérifier toutes les 50 étoilesalorsalors alorsle deuxième plus, okoui c'est ça, il y a deux, si je me souviens bien
00:31:19 :il y a deuxdeux parties au trucil y a une partieun peu plus simple qui est assez facileet après il y a une partie où il rajoute un niveau de difficultéalors désolé je mets un petit peuen forme le texte pour qu'on puisse lire ça mieux
00:31:33 :hop il découvrehople documentchaque ligne contenaithopok alors c'est çadonc en fait on a des numéros, ouais c'est çadoncdonc je pense qu'en fait je peux vous passertout le blablapour simplifierdonc en faittribuchet1, 24 lignes sont12, 38, 15
00:32:13 :et 77alors 77 pourquoi il y a un deuxième 7quand t'as un chiffre qui double chaque foisah oui c'est ça ok parfaitmerci ça m'évite deokparfois on met un seul numéro à deux chiffresok ça j'avais pas tiltéqu'il y avait une petite difficultéen plus
00:32:35 :donc en gros il faut prendrejuste les deux chiffres qu'il y adans la chaîneet s'il y en a plusieursdonc là par exemple celui là15, on prend le premieret le dernier seulementet s'il y en a qu'un on le doubleet après il faut additionner
00:32:53 :tous ces nombresok c'est çadoncest-ce que c'est clair pour tout le monde ce qu'il faut fairevous voulez que je redisedonc par exempleici il faut prendre le premier et le dernierdonc on a 1 et 2 ça donne 12là on a juste 3 et 8
00:33:11 :donc on prend le premier et le dernier hop ça donne 38ici on a5 chiffreset il faut prendre donc le premieret le dernier donc ça donne 15et ici on en a qu'un 7 et il faut le doublerparce qu'il y en a qu'undonc là on prend le premier et on le double
00:33:27 :donc moi comment j'aborderaisce truc làje me diraisje pense que j'iraisdirectement en me disantun truc qui est bien c'est de se direcomment on ferait à la main, ça c'est une première techniquede se diresi j'ai pas de pitonet que je dois le faire moi et que je prends ces exemples
00:33:47 :là donc je vais les mettre en basj'ai ces trucs làici je vais faire des chaînes de caractèredonc commentje le ferais à la mainlà je me disje prendrais le premier je me diraisest-ce que c'est un nombre ou pas, oui c'est un nombredonc je le mets de côté, je le garde
00:34:09 :quelque part et je continue comme çajusqu'à trouver un autre nombreet là je suis en train de me direoui et non parce queil faut qu'onpar exemple dans cet exemple là je suis pas intéressépar le deuxième nombrece qu'il faut c'est que je parte dans l'autre sens
00:34:25 :donc il faut que je partedans le sens gauche pour trouver un premier nombreet dans le sens droit pour en trouver un deuxièmedonc en partant de la gaucheet en partant de la droite parce que là par exempledans cet exemple ici j'en ai rien à faire
00:34:37 :du 2, du 3 et du 4donc ça sert à rien de récupérer tous les nombresmoi ce que je veux c'est justela première occurrence d'un nombredans un sens et dans un autreet dans le cas de celui-cije me dis si dans un sensje récupère un nombre
00:34:53 :et dans l'autre je récupèrealors là il y a un petit truc à se dire en plussi dans un sensje récupère un nombre et dans l'autre sensje récupère un nombre, est-ce que c'est le même nombreet alors si c'est le mêmenombre est-ce que c'est un problème, est-ce qu'on peut le doubler
00:35:07 :parce que là imaginezon va voir si on fait cette techniqueon va passer première lettrec'est pas un nombre, c'est pas un nombre, c'est pas un nombreon va arriver là avec le 7, on va le garderd'un côté, on va avoir 7et ensuite on va arriver de l'autre côté
00:35:21 :on va prendre ça, c'est pas un nombre etcet là on va avoir 7 aussi, on va le garder de côté, on aura 77et c'est effectivementce qu'on veut, on veut 77donc est-ce qu'on a pas déjà la solutionau doublementparce que si c'était un autre nombre
00:35:35 :si on avait un 5 ici, on aurait 75 et c'est finieuhouais, j'ai l'impression que ça suffiten fait, qu'on aura même pas besoinde faire quoi que ce soit pourdoubler si on part sur cette approcheparce que je me dis queon aura forcément, voilà si y'a qu'un nombre
00:35:51 :si on a un 4 ici, on aura 4 4dans les deux senssi on a un autre nombre ici, bah ça fera4 4 aussidonc si on a 4 5bah c'est pareil, on aura 4 5, c'est bondonc ça me semble pas être un problèmeau début je me disais, bon bah si on
00:36:07 :récupèreparce qu'on peut faire une autre approche aussiça, ça peut être une première approcheune autre approche à laquelle je pense tout de suitec'est de se dire, de faire un genre de filtredoncdonc de se dire, en fait on va enlever toutes les lettresdonc là par exemple, on enlève ça
00:36:23 :là on enlève ça, on garde juste vraimentles nombreset après, bah sion a juste deux nombresbah en fait c'est bon, là encore je me sens que y'a pas besoinde faire plus, si on aplus que deux nombres, comme par exempleici on va avoir1 2 3 4 5
00:36:41 :et 5, bah là on prend juste le premieret le dernier, donc làpar exemple on convertit çaon a même pas besoin de convertir en liste, on faitcrochet 0 et crochet moins 1 et on a ce qu'il fautet là dans celui-ci, on aura justeun 7 à la fin, donc là
00:36:55 :on rentre dans un cas de figure, on n'a qu'un nombreet on peut juste faire une vérificationsi à la fin, notre chaîne de caractèreelle contient qu'un seulélément, qu'un seul nombrepuisque ce sera forcément un nombre vu qu'on aura enlevétous les chiffres, toutes leslettres pardon, bah on a juste à le doubler
00:37:11 :à faire un x2 ouquelque chose du genre pour le doublerdonc ça aussi ça me sembleune autre façon de faire qui est peut-êtreplus simple que depasser toutdans un sens ou dans l'autre, on peut aussipenser par la suiteaussi à de l'optimisation, moi c'est quelque chose que
00:37:29 :j'ai tendance à penser en secondplus le tempspasse, plus vous devenez pro, plus c'est quelque choseque vous allez penser en premier lieuc'est pas forcément toujours évident, comme je vous disaisau début de la session, quand on a des trucs de grapheset tout, des trucs plus complexes
00:37:43 :c'est pas forcément évident tout de suite quelle estla solution la plus optimaledes fois même en fait on le sait pas et il faut juste faire des testssur des grands volumes de données pourfaire des benchmarks et voir ce qui est le plus optimallà dans ce cas-ci on peut deviner
00:37:55 :un petit peu ce qui peut être le plus optimalpar exemple si on a une chaîne de caractères avecun million de caractèresça va probablement être assez long de faire une bouclepour passer à travers chaque caractère pourvérifier, si on peut justefaire un filtre, à mon avis une regex
00:38:09 :dans ce cas-ci serait plus rapidepour juste dire ok tu gardes à voirparce qu'il faut voir comment fonctionne la regex là encoresi la regex finalement fait la même choseet passe à travers chaque caractèrepour détecter ce qui est bon ou pasça c'est quelque chose que je suis pas sûr
00:38:23 :d'ailleurs, comment la regex fonctionneà mon avis c'est quand mêmeun outil assez utilisé pour qu'ils aientoptimisé le truc et que ça fasse quelque chosejustement d'assez clean en arrière-planpour ne pas avoir à parcourir toute la séquencedonc voilà, moipour toutes ces raisons je partirais plutôt sur la deuxième
00:38:40 :approche de filtrer pour garderjuste les nombres et ensuitefaire ce qu'on a ditet effectivement Pierrec'est intéressant aussi ce que tu disc'est de, làon a une approche un peu empiriqueje me souviens bien mes cours de mathspuisque là on a effectivementun peu des cas de figure où
00:39:00 :on a juste 4 cas en exempleje sais pasle advent of code j'imagineils ont des tests unitaires et ils doivent avoirun paquet d'autres exemples dans leurs testsunitaires pour vérifier que ça marche avecplein d'autres cas de figurelà ce qu'il faudrait faire c'est vérifieressayer de penser à d'autres cas de figure
00:39:18 :qu'on pourrait avoir, par exemple est-ce quesi on a juste des chiffres comme ça notre solution va marcherqu'est-ce que ça donne aussisi on a juste des lettresvoilà il faudraitpenser à d'autres cas de figure qu'on pourrait avoirqui font quepour voir si notre solution fonctionne ou pas
00:39:34 :alors c'est bon jusque làchacun a uninputalors la listeça c'est lesur le advent of code tu veux direah cooldonc Gab nous dit qu'il avaitmerde j'ai perduj'ai perdu l'ongletoui voilàt'avais tout çaen fait j'ai misdans un fichier texte du coup
00:40:14 :j'ai pu le faire le parcourirah oui ok okc'est bien faitoui parce qu'après donc là effectivementon a aussi le deuxième cas de figureque je vois le deuxième palier si je me souviensbien avec les nombres qui sonttoutes lettresoket ça c'était aussi pour le palier 1
00:40:38 :ce fichier d'exemple làou c'était juste pour le palier 2et le palier 1 aussiok parfaitje vais en prendre quelques un comme çaon va les mettre à la suite icion va faire une petite liste avec tout çacomme ça on va pouvoir les passer à travers
00:41:00 :on va faire vérifet on va faire une listeet hopokvoilà donc là je vais pouvoirvérifier comme ça si mon scriptfonctionne avec tout çadoncje pense que je vaiscommencer, je réfléchisje pense queje vais commencer avecla façon la plus, je vais quand même vous montrer
00:41:30 :la façon justement sans partir sur les regexon va prendre un exemplemoi j'aime bien montrer ça justement aussipour les débutants, montrer qu'il n'y a pas demauvaise façon de faire au début parce que justementdes fois il y a des gens quiveulent faire des exercices comme ça et que
00:41:44 :tout de suite ils vont voir regex, ils vont se dire oh là en faitil n'y a pas d'autre façon de faire et là les regex ça fait un peu peuret on se lance directement dans un truc un peu compliquéet c'est démoralisant parce qu'on sedit merde en fait il faut tout de suite
00:41:54 :connaître des trucs assez compliqués pour pouvoir fairemême le premier jour de l'advent of codepas forcément, donc j'aime bienvous montrer justement à quel point on peut faire des chosesqui des fois ne sont pas du tout efficaces mais fonctionnentet comment on peut quand même arriver à un résultat
00:42:06 :doncje vais prendre la première façon de fairecomme je vous disais, on va prendreune chaîne commeon va prendre celle-cije l'aime bienet je vais faire une petite fonction que je vais appelerque je vais appelertoujours le plus durvérificateurallez on va l'appeler comme ça aussi
00:42:28 :et on va prendreune chaîneon va l'appeler comme çaet on va passer vérificateuron va passer notre chaîne comme çaet je vais faire un printde tout çadonccomme je vous disais, là on peut tout simplementse dire qu'on va faire une boucle, on va passer à travers
00:42:48 :chaque truc dans un sens et dans l'autreet on vadonc on y va vraiment avec le truc le plusle pluscomment direle moins efficace mais le plussimple à penser dès le débutse dire je vais aller dans chaquelettre ici etvérifier si chaque lettre est un chiffre et si c'est un chiffre
00:43:08 :je le prends et je m'arrêteau premier en fait, on a pas besoin d'aller plus loindès qu'on a un chiffre on le garde quelque partet après on fait la même chose dans l'autre senson le gardeet on va déjà commencer par çajustement ça sert à rien d'aller trop loin
00:43:22 :on va voir déjà ce que ça donneon va lui donner aussi notre cas d'exemple avecjuste un nombremoi j'aime bien aussi aller comme ça, se dire voilàsans directement trop penser, on va voir ce que ça nous donnequand on met le trébuchet aprèsqui n'a qu'un
00:43:36 :nombre et on verra ce que ça donnedoncdonc parce qu'à mon avis soit en faitc'est ça de là comme ça direct je me dissoit on va avoir le même chiffre commeon avait dit et c'est pas un problème donc on a même pas besoinon a pas besoin de se créer un problème
00:43:50 :qui n'arrivera peut-être même pasdonc je vais faire une première boucle, ça c'estlà encore, qu'est-ce que j'ai dans ma boîte à outilsen françaisqu'est-ce que je dois faire, je dois passer surchaque lettre de ma chaîne de caractèrecomme je le ferai à la main, je prendrai le S
00:44:04 :je le regarde, ok, le Sc'est pas un nombre donc je passeje vais à la suite etc, comment on fait çaen Python, c'est une boucle fortdonc on va dire poureach character inchainje commence à mélanger un peu français-anglaisc'est pas très graveon va dire, donc là encore une fois
00:44:24 :boîte à outils, là c'est sûr que c'est des chosessi vous savez pas, là je pense qu'il n'y a pas beaucoupde très très très débutantsce soir, je vous connais à peu prèstousde noms dontvous êtes là depuis un petit momentmais voilà, là je sais qu'il y a des gens par exemple
00:44:40 :qui seraient là et qui diraient bah voilà je suis bloqué iciparce que je sais ce qu'il faut faire mais je saispas comment le faire, parce que je sais que làj'ai réussi à faire ma bouclej'ai le premier caractère icimais je sais pas comment vérifier si c'est un nombre ou pas
00:44:52 :donc là qu'est-ce qu'on fait, bah on va sur Googleou sur chatGPT maintenant en 2023bientôt 2024, on tapecomment vérifier en Pythonsi une chaîne de caractèreest un nombre, on va tomber surisDigit ou alors vous l'avez vu dans les courset vous vous en souvenez et là c'est encore mieux mais
00:45:08 :des fois il y a des choses qu'on n'a pas vu dans les cours doncon est obligé de cherchervous pouvez demander aussidirectement à l'assistant sur docstringil va vous répondre, on va faire un petit testça va me permettrede tester si ça fonctionne bienhop je vais ici
00:45:24 :je dis hop nouvelle conversationcomment vérifiersi une chaîne de caractèreest un nombreen Pythonhopalors pour vérifier en Pythonvous pouvez, différent, anti-flottantvoilà donc pour vérifierisDigit donc c'est effectivement ce qu'on va utiliserlà il va préciserdétecte pas les nombres négatifsah oui ni les nombres avec un point décima
00:45:50 :donc là est-ce que c'est un problème les nombres négatifsil faudrait retourner voir dans l'énoncési c'est un problème ou pasje crois pasparce que je pense pas quedans l'énoncé on nous demande de vérifier les nombres négatifsdonc on va considérer que c'est pas le caset on va utiliser
00:46:06 :donc isDigit, donc là on peut juste faire un printeachCharacter.isDigiton va pas plus loin, on reste avec des printspour l'instant, je vaisenlever d'ailleurs mon print làon va voir aussi un petit peu comment utiliserle débuggeur, ça peut être un bon exemple aussije vais me laisser
00:46:22 :et je vais lancer donc mon AdventOfCodeet là bah voilàon a ce qu'on veut, on a false, false, falseetc, à un moment on va avoir un trueet à la fin on a un noneparce que c'est juste le printdu retour de ma fonction et là comme je retourne rien
00:46:36 :bah ça retourne par défaut nonedoncdonc là on al'information qu'on veutà savoir est-ce que c'est un nombreet là ce qu'on peut faire c'est juste fairepar exemple là, on pourrait initialiserdéjà des variables ou les mettre icidire if eachCharacter.isDigit
00:46:54 :on va dire quea par exempleégale à eachCharacteret donc là où est-ce qu'on est renduon arrive là, on se dit ok donc làon va avoir un nombre, on va dire que a est égaleà cet élément ici, donc à 5et là qu'est-ce qu'on fait
00:47:10 :bah là on peut juste faireun break, donc là encoreil faut avoir vu au moins des tutospour savoir çaou alors vous dites bah voilàcomment sortir d'une boucle, pareilvous cherchez sur google, vous tombez sur breaket donc làce que ça va faire c'est que dès qu'on tombe
00:47:28 :sur un caractèredans la chaîne qui est un nombreon le sauvegarde quelque part, donc là on fait justeune variable, on le sauvegarde et on passe à la suiteensuite on peut fairela même chose dans l'autre sensdonc là encore soit vous savez directement comment fairesoit vous cherchez, donc comment on fait pour passer
00:47:44 :à travers une chaîne de caractères dans l'autre senson peut inverser la chaîne de caractèresen faisant comme ça, donc petiteastuce, puisqu'une chaîne de caractèresce n'est rien d'autre qu'une liste de caractèresdonc on peut utiliser cette syntaxesur une chaîne de caractères et ça va justel'inverser, on pourrait aussi
00:48:00 :utiliser, si je ne metrompe pas, alors on pourrait faireun list.chain.reversecomme çaon pourrait faire aussiun reversedde list.chainje ne sais même pas si on abesoin de le convertiron va aller voirah oui donc là il ne me le montre pasdonc il faudra aller regarder l'aide de cette fonction
00:48:24 :moi je vais faire la façon plus simplecomme ça pour passerdans le sens inverse du coupdonc là en fait j'inverse ici ma chaîne de caractèreset je reboucle dessusdonc là on va passer dans l'autre senset on va faire exactement la même chose en faiton va juste tout simplement dupliquer
00:48:40 :le code, là encore au début vous n'embêtez pastrop avec, ah tiens j'ai répété le codec'est quelque chose que vous pouvez mettre dans une autrefonction par la suite si vous voulez avoir un codequi est un peu plus clean, pour l'instant on va juste resterlà dessus, et là qu'est-ce qu'il nous
00:48:52 :reste à faire, donc on pourrait diretout simplement returnint de, alors non c'estje crois qu'il faut les retourner enoui c'est ça c'est à la fin qu'il faut faire le produitmais on va quand même lesretourner sous forme de nombre puisqu'on veut lesles additionner à la fin
00:49:08 :donc ce qu'on va faire c'est retourner un intde a plus b puisque là on aurades chaînes de caractèresalors là il me metdes petites erreurs parce quej'ai peut-être pas pensé à toutah oui parce queoui bah non c'estoui okje pense que je vois ce qu'il veut dire parce que
00:49:28 :tiens c'est marrantc'est juste un truc detype int, non okeuhoui là si je mets oket je vais mettre d'ailleurs un type int ici pour indiquer qu'on retourneun intdonc a plus b ça va êtredes chaînes de caractères puisque làje vais mettre ici string
00:49:48 :et a plus bdonc on va avoir par exemple 5 et 8et on va retourner et là le problème qu'on pourrait avoirc'est que a et b seraient pasforcément définisje pense que c'est ça qu'il nous dit icisi on va voir dans les warningslocal variable a might be referenced before assignment
00:50:04 :donc ça c'est une erreur assez courantec'est pour ça quej'avais eu envieici de les définiron pourrait faire quelque chose comme ça par exempleeuhoui donc là à voir comment on gèreles différents cas de figureon pourrait aussi fairetout simplement à voirlà encore dans les cas de figure est-ce qu'il y a des exemples
00:50:26 :je sais pas si ils expliquent tout çaici que faire en cas d'erreurpour ceux qui ont fait l'exercicec'est ce qu'ils disent s'il n'y a pas de nombreon va vous retourner 0 par exemplenon ils disent pasmais nous on va faire ça de toute façon on va dire que si on tombe
00:50:40 :par exemple imaginez qu'on ait quelque chose sans nombrequ'est-ce qu'on va faire ce qui nous intéresse à la finc'est la somme en faitdonc si on fait la sommeon veut avoir toujours le même type iciqui va être retourné à savoir un intdonc là ce qu'on va faire c'est tout simplement mettre
00:50:54 :des zérospar contre on va les mettre en chaînes de caractèreici parce que sinon on risque d'avoir un problèmequand on va faire leou quoique nonon aura même pas forcément de problèmealors là on va faire 0 plus 0ça va faire 0 et on va convertir 0
00:51:10 :on va convertir 0en int donc ça va faire 0donc on pourrait faireça comme ça je pense pas que ça poserait de problèmeon pourrait aussi quand mêmeconsidérer qu'on va tout garderen chaînes de caractère comme çapour avoir ici si on a un caractèreque ce soit bien une chaîne de caractère
00:51:28 :et si on a rien on a quand même des chaînes de caractèrecomme ça si on arrive ici peu importe ce qu'on faitaprès dans tous les cas de figureon a le même type de données et après on peut gérerà partir du même type de donnéesparce que sinon là si des fois on a des nombres
00:51:40 :des fois des chaînes de caractère ça va faire deux cas de figuredifférents à gérer donc je préfère garderla même chose icidonc là je vais lancer mon scripton va voir ce qu'on a et on a bien le 58 icidonc là ça fonctionne là dessuson va le lancer sur le deuxième on a 77
00:51:54 :donc comme je vous disais là vous voyezon a directement ce qu'il faut donc pas besoin de se préoccuperavec un problème qui finalement n'a pas lieu d'êtreon va essayer de faire 100rien ici et là on a bien 0donc là déjà on commence à sentirqu'on gère pas mal de cas de figure
00:52:08 :on va lui passer ici toute la listede vérifs pour vérifier qu'on abien ce qu'il fautdonc là ce que je vais faire c'est tout simplementpour each verif in verifon va faire vérificateurde each verifet on va faire un print de tout çaet avant on va faire un print de each verif
00:52:26 :et après je vais faireun petit truc que je fais souventtac tac tac hopdonc voyons voirlà on a 12, là on a 38là on a 15, 7741 donc ça marche aussi avecque des chiffres c'est bon0, 22on double donc là voilàencore juste en regardant comme ça
00:52:48 :ça semble bon, là on a 21donc ça marche bien aussi si on a deux fois le mêmenombre puisque logiquement là encorecomme on avait dit en fait on récupère le premieret le dernier, si c'est le même ça pose pas de problèmeon a bien deux nombres
00:53:00 :à chaque fois donc il n'y a pas de cas de figureoù on a plus que deux nombres et il n'y en apas non plus dans lesquels on pourrait en avoirparce qu'on fait juste additionner deux éléments icidonc voilà donc là comme je vous dison a quelque chose qui fonctionne
00:53:12 :qui est par contre pas super optimisési vous vous souvenez que le lendemain votre boss il arriveet il dit maintenant en faiton va prendre les deuxpremiers et les deux derniers, bah là en faitvous allez devoir faire C et Dvous allez devoir modifier votre fonction en faisant C, D
00:53:26 :en faisant peut-être 4 bouclesetc et c'est là que vous commencez à faire du codequi est vraiment pas très clean, donc là il faudraitcommencer à se dire comment je peux faire un truc plus génériquepour par exemple donner un deuxièmeélément ici en disant combien de nombres on peut récupérer
00:53:38 :etc etcon va pas faire ça là mais voilà c'est juste pour vous direqu'une fois que vous avez fait ça c'est bienvous avez résolu le problème, maintenant vous pouvez essayer d'améliorervotre code.
00:53:48 :Donc est-ce qu'on va faire déjà là-dessuson va quand même voir icipotentiellement comment on pourraitjustement améliorer ce codepour pas passer par A et Best-ce que ça vaut le coupest-ce qu'on passe sur les regexparce qu'en fait je suis en train de me direque vu que le code de base est pas
00:54:08 :forcément la meilleure façonde gérer ce cas de figure je sais pas vraiment si ça vaut le coupd'optimiser çaparce qu'on va avoir un truc, on va éviterla répétition ici mais ça va quand même pas êtresuper idéal.
00:54:20 :Donc je pense que je vaisplutôt aller sur la regexest-ce qu'il y en a d'autres qui avaient faitun peu différemmentque regex ou quelque chose du genre ?
00:54:30 :J'ai créé un objetcarrément avec différentes méthodestu l'as mis sur tonsur lefichier qui s'appelle décodeur.pydécodeur.pyok alorst'avais faitdécodeurje vais le copier ça va être plus simplecopieon va le mettre làalorsdécodeurself.file
00:55:10 :open fileokah oui alors çaje l'avais vu aussi je sais plusc'est où que j'ai vuj'ai vu ça sur un de tes dépôts Gaboù j'ai vu que tu faisais des fonctionspour une lignede code etje me disais que c'était peut-être un petit peu
00:55:38 :et même une classe comme çaje trouve que là c'est peut-être un petit peuoverkill comme on dit en bon françaisparce que justementtu rajoutes quand même beaucoup de complexitéfinalementsur quelque chose que je mettraisprobablement plutôt dans une fonction dans ce cas-ciparce que là tu vois finalement
00:55:56 :tu vas avoir 5 lignes de code mais làqui sont encapsulées dans une classequi encapsulent à chaque foisdes fonctions qui n'ont finalement qu'une lignedonc là en fait je risque de passerdéjàpas mal de temps à regarder comment tu initialisesta classe, qu'est-ce qui est appelé, où en fait
00:56:12 :tu commences par quoioù est le point d'entrée, donc là j'imaginec'est ça ton point d'entrée puisque les autres tu les as misen privédonc tu vois aprèsgetFirst là tu fais ça, finalement après tu extraisles digitsdonc tu vois finalement je passe beaucoup de tempsà chercher partout
00:56:30 :ça vaut le coup de faire une classe etcsi tu commences à avoir beaucoup de choses, beaucoup de traitementsetcmais là comme tu vois on part sur quand même quelque chosed'assez simple, je commencerais par quelque chose de simplequitte à par la suiterefactoriser ton code pour le mettre
00:56:44 :dans une classe, plutôt que direct partir dans un trucqui est trop complexe pour ce que tu as besoin de faireet peut-êtreque tu vois qu'il va jamais, parce que ça va te prendre du tempsaussi, ça va te prendre probablement plus de tempsà penser à tiens comment je vais faire ma classe
00:56:56 :séparer les choses pour finalement quelque chosequi n'aura peut-être jamais besoin d'êtreaussi complexe que ça tu vois parce qu'on aura peut-être pasbesoin deimagine tu voist'es en entreprise, peut-être que le problème va jamaisêtre plus compliqué que ça et que du coupt'auras fait un truc trop complexe pour le besoin
00:57:12 :ok d'accorddonc làje regarde ta extractdigit, ok donc làouais okokfor linealors e for e in lineet ta liste c'estok tu faistu décodestout ça en faitoui parce que tu fais le trucqui est demandé effectivement de sortirun nombre
00:57:46 :c'est ça, sumCord c'est que tu récupèresun seul nombre à la fin à partir de tout çadonc là pourline ok et tu faisok donc ça veut dire que pourchaque ligne ici tu récupèresen fait tu fais ce filtre en faitc'est à dire que t'enlèves tout
00:58:02 :lestrucs qui sont pas des lettres en faitdonc ouaisextract digit donc ça ouais c'est bienc'est bien nommé effectivementouais je l'appelleraisje sais pas sije me demande si je l'appellerais extract digit ouremove letters tu voisbon c'est un peu pareilget firstand last oui donc là finalement effectivement
00:58:26 :tu fais ça n0 n-1 donc c'est le truc quej'ai dit là quand je faisais les différentesfaçons de faire on pouvait faire ça effectivementenlever tout et puis après récupérer le premieret le dernier là faudraitvoir si ça fonctionneoui ça fonctionnerait aussi si t'en asqu'un parce que j'allais dire je pense que ça
00:58:46 :fonctionnerait pas là par contre si on avait quesi je lui passecelui là je suis pas sûr que ça fonctionnerait parce que làdu coup t'aurais une chaîne vide et t'aurais unindexerror parce que tuferais un crochet 0 et crochet-1 suruneliste videdonc là je pense qu'il y aurait
00:59:04 :un cas de figure après peut-être quedu coup ils avaient pas prévu ce cas de figure là dansl'énoncé donc dans ce cas là t'as bien réponduau sujet mais si on rajoutecette contrainte que des fois tu peux avoir deséléments qui contiennent pas de nombre là je pense que ça
00:59:16 :planterait du coupouais ouais ouaisc'est possible que dans l'énoncéils précisent ou que dans lestests qu'ils lancent il y ait pas ce cas de figuremais je me suis dit queça pouvait être un cas de figurequi apparaîtouais mais ok sinon c'est mais tu vois
00:59:34 :effectivement çaeuhouais parce qu'en plustu vois là justement tu faistu fais descompréhensions de liste ici icidonc du coup là tu voisil y a beaucoup de complexité à tous les niveauxdes compréhensions de listedéjà c'est bon c'estbien là je pense que ça vaut le coup d'en faire ici
00:59:56 :parce que t'as pas grand chosemais quand t'as une compréhension de liste qui estdans une méthode qui est dans une classe etctu vois ça commence à faire beaucoup debeaucoup d'informationsdans tous les sens où ça paraît être un truc super complexealors qu'au fait ça l'est pas
01:00:10 :euhmais voilà enfin je te l'ai déjà diteuh ouais donc du coup c'estc'était l'autre façon de faire effectivementje ferais quelque chose du genre doncsans la classe mais sinon le code ressemblerait à çaeffectivement et la dernière façon de fairedonc ce serait avec la regex donc c'est ça qu'on va voir
01:00:26 :euh la regexalors les regex moi c'est le genre de trucc'est comme le module datetimeou le module random ou des trucs comme çaje me souviens jamais par coeur de tous ces trucs làeuh je sais qu'il y ail y a le searchle re.search pour
01:00:42 :pour chercheron a lec'est pas replace c'est le rstripou un truc comme çaeuhc'est quoic'est quoi l'objet qui est créé icitu parles de quel objet Yanis ?
01:00:58 :ah oui ok tu parlais deoui c'est une classeeuhhopet là aussi tu vois Gab en fait il faut faireil faut faire aussi du coup une instance à partirde ta classe donc dans ce cas-cic'est pourquoi pastu vois pourquoi pas si t'avaissi tu commences à avoir beaucoup de choses à gérer
01:01:18 :avec beaucoup de fonctionnalités mais là encore tu vois je me disprobablement qu'en fait si on a juste un inputde fichier à traiter ben en faiton va juste faire une fonction processtu vois on va lui passer un fichieron va mettre tout ça dans une boucle et on va lui dire voilà
01:01:30 :genre tutu vas récupérer tous les fichiers sur le disquetu les loads, tu les process et tu me sors çaailleurs tu vois si à chaque fois en faitfaut créer une instance pour aller lire le fichieretc ça fait là encore une lourdeurpour pas grand chose finalement
01:01:44 :euhdonc avec les regex comme je vous disais c'esteuhc'est je vais ouvrir un terminalet je vais aller voiron va faireon va fairetac ouais terminéça ça aussion va faireeuhimport re et on va faire un dir de reet c'esteuh
01:02:14 :c'est pasmatch ah c'est subsub voilà sub si je me souviens bienhelp de re.subouais c'est ça patterneuh ouais c'est çadonc là si je me souviens bienon peut faire re.sub
01:02:32 :et on lui passealors je sais plusje sais plus helpre.sub qu'est-ce qu'il y avait dans les paramètresdonc le premier c'est le patternle repc'estrep c'est replacement et string c'estla chaîne de caractèred'origine du coupdonc ça va donnercomme ça là on va mettre
01:03:00 :notre patternlà on va mettre ce qu'on veut remplaceret là on va mettre la chaînedonc là par exemple on va copier ce qu'on avait icion va copierhopun pas trop longvoilà tiens lui il est bientac on va remplacerpar rien et on va mettre
01:03:20 :si je me souviens bien slash dqui indique quec'est undigitet là je mets un r devantpour qu'il soit évalué enraw string parce qu'il y a beaucoup de chosescomme les slash dans les regex qui peuvent êtreinterprétés différemment comme les slash tslash n etc
01:03:40 :donc là si je mets slash douais alors làc'est l'inverse du coupparce que là on a enlevéalors soit ce qu'on pourrait fairec'est si je pense si je fais un searchà la place et que j'enlève çaouais là on pourrait faire çaet après si je me souviens bien on va faire
01:04:00 :groupeouais là il y a les groupes match 1euhsi je mets 1non je sais plusje le sais plus mais on peut fairedonc search pour chercher ou sub pour enleverdonc si je reviens sur mon subdu coup je vais grossir un petit peule sub là du coup il faudra enlever
01:04:20 :moi pour ça donc je prendsregex 101j'aime beaucoup leur petit truc en baslà qui montre tout ce qu'on peut fairehop si je prends un peu de placeici, icihop donc on ale slash d qui estles any digit et lesnon digiteuhany non digit c'est en D
01:04:44 :en majuscule donc si on fait ça comme çavoilà donc là vous voyezhop on a enlevé tout ce qu'on ne voulait pasavec le subet là à partir de çaon pourrait faire crochet 0pour récupérer le 1 et faire pareilque ce qu'avait fait gabet je pense que ce serait
01:05:02 :la façon la plussimpledonc on pourrait mettre tout ça dans une variableon met digitset ensuite on fait int de digitsde digitscrochet 0 plusdigits crochet 1comme ça et là on a bien le 12donc on pourrait passer par ça aussije vais copier ça
01:05:24 :et ce serait effectivement un peu plusun peu plus simpleon a vérificateur, on va faire vérificateur2chain string et on va retournerun int là aussiet je vais faire ça hopreturn et on vaimporter iciet on va testersi on a bienet là on pourrait rajouter
01:05:48 :un totalégal à 0et ce qu'on va faire c'est on va rajouterça dans le totaldonc on va direnombre égal à ça et on va fairetotal plus égal à nombreet à la fin on va primer le totallà encore on pourrait mettre tout ça
01:06:06 :dans une compréhension de liste et on vavérifier qu'on a bien le même résultat avecvérificateur 1 et vérificateur 2donc là je vais mettre la chaindonc normalementstring index out of rangeeffectivementdonc là plusieurs façons de gérer çalà on peut faire un try catchsi on veut pas s'embêter on va faire un indexerror
01:06:26 :donc on va faire un tryçaet except indexerrorlà on retourne 0première façon de gérer le trucc'est pas 15 qu'on doit avoirje me suis plantéah ouij'ai mis 1 au lieu de moins 1effectivement j'ai oublié le moinsbien vudonc là on a 718
01:06:52 :je vais enlever les prints làon a 718 avec levérificateur 2 et avec l'autreon a 718 aussi donc ça marcheon a bien ce qu'on veutet là vous voyezje fais juste un try excepton pourrait faire une autre façon on pourrait direif len 2 digits
01:07:10 :etalors là on peut avoiron peut avoir potentiellement un seulun seul élément donc on va direeuhon va direalorssi je mets le plus grandje veux dire on va faire l'inverseon va direest ce que si elle estplus petite que2 non
01:07:36 :on pourrait faire un iflen digits donc on pourrait faireentre 0 et2avec 1 égalnon 1plus grand ou égalou 2 plus grand ou égallàon va retourner çaet sinon on retourne 0hopouais euh nonlà donc ça marchelen digits donc len digits
01:08:08 :ah bah non c'est çaparce qu'on peut en avoirnon c'est ça il faut qu'il y en ait au moins 1 c'est toutoui oui il faut que ce soit au moinsplus grand ou égal à 1 parce qu'en fait on peut en avoirbeaucoup pluseuh pas égal
01:08:22 :égal Jonathan parce qu'en fait c'est çaon peut avoir comme ici on va avoir 1,2,3,4,5le seul cas de figure où on peut avoirun problème c'est la fameuse chaîne de caractèreoù il n'y a rien là celle là iciparce que là en fait on auraça sera égal à 0
01:08:36 :donc en fait là j'ai mis plus grand ou égal à 1mais en fait on peut juste faire if len digitsparce que si c'est égal à 0len digits sera évalué comme falsenormalement ouais c'est bonça marche de nouveauje sais pas pourquoi je me suis compliqué la vie plus que ça
01:08:50 :euhparce que si on en a 1si on a au moins un nombre c'est le cas du trébuchet avec le 7là donc on va juste doubler le nombreon va récupérer le 0 et le moins 1 qui va êtrele mêmeparce que 0 et moins 1 quand on a juste un élément
01:09:04 :ça va être le premier et le dernierdonc c'est le mêmedonc voilà on a juste besoin de vérifier çadonc voilà deux façons de faireil y a les deux fameux conceptseafp ou lbyleasier to askfor forgiveness than permissiondonc ça c'est le try excepton y va bourrin et si ça plante on dit
01:09:24 :excuse moidonc plus facile de demanderpardon que de demander la permissionça c'est le try exceptc'est regarde avant de sauterdonc c'est celui làmoi je préfère souvent lelook before you leap parce quedes fois ça peut être un peubon là c'est pas des calculs très important
01:09:44 :mais le problème de eafpdonc de ce try except c'est que imaginez icique vous ayez une opération très longueque vous ayez 2-3 lignes de code avec des grosses grosses opérationsvous allez quand même tenter de faire ces opérationset c'est si ça plante que vous allez dire ok c'est pas grave
01:09:56 :passe au prochaindonc ce qui peut vraiment ralentir votre scriptce qu'on peut fairec'est à l'inverse direvérifie avant si j'ai la conditionqui fait que ça va pas planteret si oui là tu peux faire le calculdonc là comme ça on évite de fairepotentiellement quelque chose qui va être
01:10:14 :qui peut demander beaucoup de temps de calculdonc voilà moi je préfère cette façon de faire icidonc voilà on a résolu le problèmeavec 3 façons de fairedonc les 3 que je voulais vous montrersoit comme on a vu avecdes boucles, donc un peu ce qu'avait fait Gab
01:10:30 :avec des compréhensions de listeou effectivement c'est une autre façon de faire une boucle comme on avait faitla compréhension de liste va avoirun effet de filtre, on va créer une nouvelle listebasée sur une conditionqui dans ce cas-ci était le listdigitsinon donc avec la boucle for pour passer sur
01:10:44 :chaque caractère pour vérifier silà encore on a un digitet ensuite on récupère les élémentset sinon avec une regex pour passer parune façon de faire qui est plusen mode filtre, on enlève tout cedont on n'a pas besoinet on récupère ensuite pareille crochet 0, le crochet moins 1
01:11:02 :et voilà du coup pourcet exerciceest-ce qu'il y en a quiqui avaient bloquéou qui voient un peu mieuxcomment on peut aborderou qui se disent encoreje pense pasque j'aurais réussi àcommencer ce truc lànon ça vaouais du coup je vous laisse
01:11:48 :regarder la deuxième partien'hésitez pastant que vous avez la solution de la premièreje pense que vous pouvez accéder à la deuxièmeou aller sur le discord aussi je penseparce que la deuxième partieest sympa aussiet ouais n'hésitez pas à essayerà partir de çaouais Sylla t'as une question
01:12:12 :ouibon je sais pasparce que moi je n'avais pas vule sujet par exemplecomme je ne suis pas connectéje sais pas si c'était sur discordou si c'était sur doctrineouais c'est sur discordje remonte çaen fait on a faitdonc là tu descends un petit peu
01:12:38 :en dessous du premium dansl'advent of codeils ont faiticiest-ce que c'est tous les énoncésah non c'est çat'as juste ces deux là, ça c'est pour les modérateursdonc t'as le forum avectous les sujets et donc jour 1par exemple tu vois ils ont mis les liens
01:12:58 :à chaque fois, ils ont vraiment fait ça biendonc t'as le lien, ils ont faitles énoncés qui doivent êtrevoilà, donc t'as le jour 1c'est pour discuter en fait sur les sujetset après tu vas avoir thread challengeénoncésils sont là, énoncés des challenges, ok ils ont tout mis
01:13:14 :dans un seul, ok ouais c'est çaénoncés des challengesdonc là tu vois t'as le énoncé jour 1ils l'ont traduit en françaist'as la partie 2 icic'est la fameuse partie là que je vous conseille de regarderet à chaque fois du coupvous pouvez aller voir toutes les discussions qu'il y a eu justement
01:13:30 :jour 1, si vous voulez voir ce qu'ont fait les genssi vous voulez voir pour la partie 2les problèmes que les gens ont eu ou quoiet si vous voulez discuter aussi desi vous faites le projetpour aller voir icic'est ça moi, parce que j'avais vu le message
01:13:44 :d'avril mais j'avais pas comprisouais ça c'est directement du coup sur discordouaisouais ok ça moidonc du coupla partie 2 ça sera lasemaine prochainenon ça c'est déjà dispoc'est le jour 1 donc ça fait un petit momentqu'il est sorti làil est déjà là
01:14:06 :et oui oui n'hésitez pasje vais profiterj'ai une autre question monsieur Thibaultouais vas-yalorssi l'orienté objetdisonsj'ai ma classeje veuxla différence entreondascore juste sur un attribut de classeet du ondascoreje veux le faire comme privéouaisje voisun underscoreje vois deux
01:14:48 :alors la différence c'est quet'en as un qui estje me rappelle jamais le termeexact parce que t'as privéet t'asencore plus privé que privérestricted je sais plusil y a une différence determe entre les deux et après en faitconcrètementle simple underscoreça ne va pas alors il n'y a rien qui est totalement
01:15:12 :protégé mais en gros si tu faisune classe test comme çasi tu faisfou icicelle là en fait tu vas pouvoir y accéderdonc si je fais a égale test comme çaet que je fais a.fou
01:15:26 :fou comme çaça va pas causer l'erreuroktu vas quand même pouvoir y accéder il va juste te mettreun warning tu vois ici il va te direlà si je vais dans les warnings il va te direah oui protégé c'est çaprotégé et privé donc là il va dire
01:15:42 :c'est protégé donc il te met unwarning mais ça va pas causer d'erreurpar contre si tu metsun double underscorecomme ça voilàlà elle va être privée et si j'essaie d'y accédercette fois ci là t'auras une erreurdonc là si je vais voirje retourne ici là tu vois
01:16:00 :il me met carrément alors il me met en warningquand même mais si je lance le scriptlà si je commente le petit truc au dessusça je veux pasok donc si je relance le scriptlà tu vois t'as un attribut erreuril te dit carrément il a pas l'attribut fou
01:16:14 :alors que pourtant tu vois ici il est làmais ça c'est parce que du coup là elle estprivéec'est ça et en faitc'est différents niveaux deprivé à savoir que icitu peux quand même au final c'est jamaisil y a des langages de programmation où vraiment tu peux pas y accéder
01:16:30 :là avecPython si je me souviens bien tu peux y accéderalors je pense pas que c'est en passantpar la classe il y a une autrefaçon avec un trucun peu plus complexe pour quand même y accédermais normalement t'as pas besoin mais sijamais c'est possible tu vois
01:16:46 :mais c'est ça la principale différenceet oui je répondsYanis il y a vraimentn'hésitez pas à aller sur la communautéque ce soit dans les partiesprivées mais aussi justement les parties publiquesil y a vraimentquand même beaucoup de gens qui sont impliquésaussi bénévolement là sur le Advent of Code
01:17:10 :justement ça fait 3-4 ans que à chaque foistout le monde me dit ah tiens ce serait cool d'organiseret je trouve jamais le temps et làils ont fait ça à deux làBogdani et Raclettedonc vraiment ils mettent beaucoup de tempslà dessus, ils aident en vocal
01:17:24 :donc c'est vraiment la force de la communautépour progresser c'est vraiment une super occasionet comme je vous disais on va continuer aussi après décembreje pense qu'on va les laisser ouvertsun petit moment voire pourquoi pasindéfinimentjusqu'à l'année prochaine donc ça peut être un bon trucà faire
01:17:40 :Alorsune question de basesur les objets muables et immuablesOuais Yanis ça c'est une questiond'optimisation en fait c'est lesnombres de moins 5 à 256effectivementcomme c'est des nombres qu'on utilise très souventen fait ils ont des placesc'est commec'est comme les singleton comme le none
01:18:06 :ils ont des places déjà définiesen mémoire ce qui fait qu'en fait il va pasrecréer un objet à chaque foiset effectivement du coup ça fait quec'est un peu plus rapideà exécuter des scriptsmais là c'estça c'est pastrès important enfin c'est justec'est important de savoir ça
01:18:26 :quand même dans la culture généraleet deparce que des foisquand on fait le fameux ID on voit qu'il y ale même ID on comprend pas trop donc c'est importantde savoir que ça existeaprès là où c'est vraiment important cette notionde muables et immuables c'est sur des listes
01:18:42 :par exemple et c'est pour ça que là du coupt'as pas de choses prédéfinieslà dessus par exemple t'as pas je sais pas on pourrait se diretiens ils ont fait pareil avec je sais pasune liste crochet 0qu'on pourrait potentiellement utiliser tout le tempsmais non c'est pas le cas
01:18:56 :donc là la seule chosesur laquelle il faut faire attention c'estsur les objets immuablesque si tu fais ça A égale une listeet que tu fais B égale Asi tu modifies A tu vas modifier Bdonc ça j'en parle dans les cours justement surles problématiques avec
01:19:12 :les objetsles objets muables qui sontmémoires ettoutes ces problématiques d'assignationde modificationdans les définitions aussi si vous faitesune liste ici videles problématiques qu'il va y avoirlà aussi il y a uneoù est-ce que je vaistrouverune formation sur docstring là dessusliste vide
01:19:38 :j'adore la rechercheje suis vraiment fierde la recherche du siteje vous la montre au moins3 fois à chaque montoramais elle est vraiment efficacedonc là c'est les 10 erreursdu débutantutiliser une liste vide je te le mets dans le chatsi tu veux aller voir
01:19:58 :est-ce qu'il y a d'autresquestions ou on s'arrête làj'essaie ded'essayer à ce que jefixe mon script quand on fait des sessions trop longuesil peut plus transcrire parce que ça passe paspendant Whisperet j'ai remarqué qu'à partir d'1h30ça commence à faire des trucs trop lourds
01:20:24 :donc on peutessayer de continuer encore un petit5 minutessi il y a quelques questions encoreGap tu as quelques questions aussisi personne n'en ail y aYanisquand tu fais liste à puns ça renvoie rienil y a des trucs comme çaeffectivement où tu n'as pas de retour
01:20:46 :il faut faire attention des foissi tu essaies de faire un scriptautour de ça tu peux avoir des problèmesouais Gapt'avais une autre questionsi t'en ressens sipar rapport à tous les algorithmesqu'on a déjà parlémoi ça m'éclate pas tant que ça les algorithmesc'est plus vraiment
01:21:06 :le Django et tout et c'est vrai que je ne prends pas le tempsà faire d'algo donc tu m'avais conseillé moi dans tous les casde me mettre à fond sur Djangoet de faire 30 ans d'exercices sur JoyStreammaisj'ai l'impression que tout le mondet'as plein de gens qui sont sur
01:21:20 :AdventOfCode et j'avais peurà la base que les employeurs te regardent beaucoupmais je me rends comptequ'au final pas forcémentparce que j'en ai parlé avec Sarahet Lidl Djangoeux ils ne font pas AdventOfCodeils s'en fichent limitedonc j'ai l'impression que c'est pas forcément obligatoirel'algorithme
01:21:40 :c'est le Lidl Djangoc'est mon grand discourslà-dessus justementil faudra que je prenne le temps d'en faire une vidéo YouTube un jourqueça dépend de ce qu'on appelle algorithmec'est pour ça que j'aime pas ce mot parce que ça fait peur aux genset ils ont l'impression justement que
01:21:56 :en programmation on passe notretemps à faire des trucs comme un peu le AdventOfCodeoù justementquoi que l'exemple de l'AdventOfCodelà qu'on vient de faire c'est pas le pire je vois plein decas de figure un peu ce que tu faisaisaussi Gab je pense dans ton boulot là
01:22:10 :faire des listes de trucs comme çaje crois que je vois sur Twitter des fois que tu fais des scripts un peu du genredonc ça à la limite je trouve que c'est pasc'est juste bontout l'énoncé un peu folkloreetil y a trop de trucs je trouve
01:22:24 :ça fait un peu peur aussi des fois on se ditpourquoi c'est compliqué comme çadonc voilàc'est pour ça il y a algo et algo mais c'est pour ça je penseque la plupart desexercices sur Doctrine, pas tousil y en a qui sont un peu genre
01:22:38 :qui fait que des prints bon ça c'est pasbon peut-être quesi il y a des cas de figure dans lesquels on pourrait avoir besoind'afficher des trucs comme çamais créer une liste de nombres repères ça c'est plusdes trucs pourfaire utiliser la boîteà outils un peu tu vois
01:22:54 :comment on peut créer ce genre de choses mais là encorec'est pas forcément quelque chose qu'on aurait besoin de faire dans la viefaudrait que j'essaye de trouverun tag ou un trucparce qu'il y a beaucoup d'exercices par contre qui sont des trucsdes casconcrets que j'ai eu à faire dans des scripts
01:23:08 :ouais le labyrintheeffectivement ça c'est un truc qui est pasqui est très algo aussi et queça c'était Tommy qui l'avait fait je croisje sais pluset tu vois là il y a plein de trucs ça fait peur et toutet pareil quoi en fait c'estsympa si tu veux un peu te casser la tête là dessus
01:23:24 :mais bon c'est pasc'est pas voilàc'est pas un cas de figure qu'on va retrouver par exemplepar contre le nombre d'emojis c'est un trucque j'avaisj'avais eu comme cas de figure de me dire voilàsi je voulais rajouter des réactionsd'emoji sur les messagesdans les questions et réponses
01:23:42 :ici là dans, non pas dans projet mensueldans questions, comment je pourraisfaire si ici je sais pas une grandequestion on va prendre dans est-ce qu'onpourrait avoir voilà çalà imagine voilà tu as sur la réponsede quelqu'un tu veux posterune réaction d'emojicomment tu fais si tu as 15 personnes
01:24:00 :qui ont mis un emojidonc dans la base de données il est stockésous une chaîne de caractèrecomme je le mets dans l'exercice du couptiensvoilà tu as une chaîne de caractèrecomme ça et tu veux compter le nombre d'emojiqu'on a, comment tu faisça c'est plus un exemple
01:24:18 :de petit algorithme assez simplefinalement à résoudre et ça par contretu vois je me dis si çaça serait le truc si j'avais une entreprise de développementet que je voulais tester les gensje les testerais assez volontiers là dessusen me disant si vraimentje veux engager quelqu'un
01:24:34 :et que là encore le butn'est pas forcément qu'il réussisse à faire le truc le plusincroyable, optimal ou même qu'il réussisse l'exercicec'est plus de voir comment réfléchit la personnedonc voilà clairementsur un truc comme ça si j'engage quelqu'unet qu'il arrive pas à écrire la moindre ligne de code
01:24:48 :je dirais il a pastu vois je me baserais pasque là dessus mais je me dis bon voilà ça c'est quand mêmeun truc assez simplevoilà j'ai enviede voir ton raisonnement là dessussur le truc du labyrinthe si quelqu'un arrive pas à faireun truc de labyrinthe là où il faut
01:25:04 :ou de base l'énoncerun truc assez alambiqué que j'ai jamaisje vois pas dans quel cas de figure on pourrait avoir çadans un site webde clients bah ça ça me feraittu vois je le ferais pas faire ou ça me ferait moins peursi un étudiant n'arriverait pas à faire ça
01:25:18 :le fait depas aimer algo c'est pas un grand scoreentre guillemets c'est vraiment des trucs genrecoding gamec'est des gros trucs que c'est des niveauxassez hard c'est pas trop gravenon non non c'est pas graveaprès je te dis c'est juste c'est difficiled'évaluer des fois
01:25:36 :moi c'est vraiment cas par casn'hésite pas n'hésite pasje dis ça à toi mais à tout le monde icin'hésite pas tu l'as faitdes fois Gab tu vois où tu me disais tiens regardej'ai essayé ce truc là j'y arrive paset là je te dis non regarde ça c'est vraiment
01:25:50 :voilà c'est typiquement le truc alambiquéoù ça veut te retourner le cerveaupour rienou des fois c'est ça c'est même paslà l'advent of code c'est un peu folkloremais au finalc'est quand même le casde figure précis de faire une regexou de passer à travers un truc pour un s-digit
01:26:08 :là je me dis ok c'est intéressantdes fois quand c'est des trucs où genreun peu le truc styleFibonacci là écris moiun truc de Fibonacci je me dis en faiton en a rien à faire de savoir faire un truc de Fibonaccidonc n'hésitez passi vous avez des doutes à m'envoyer les énoncés
01:26:24 :puis je peux vous dire oui oui ça c'est intéressant que tu saches faire çal'énoncéun peu bizarre regarde simplifie leet puis essaye de le résoudre et là je peux vous le reformulerpour faire un cas plus précisou alors je vous dis non non ça c'est clairement un truc
01:26:36 :qu'on pourrait avoir fait le de A à Zou alors passe à autre chosen'hésitez pasà en parler dans la communautéou autre pour que je vous donne mon avisok d'accord pour quelqu'un qui veut direfonge en goouais aprèscomme dit Jonathan c'est vrai quece qui peut être intéressant quand même
01:26:58 :c'est regarderles réponses si vous avez un trucet vous vous dites ok bon j'ai pas envie de me casser la têteça a l'air compliqué regardez la réponsesi vraiment vous voyez que ça commence à devenirun truc super compliqué vous ne comprenez pasessayez de comprendre justement
01:27:12 :voilà c'est ça comme dit Yanis quand on comprendles réponses des fois vous voyez vous dites okça a l'air compliqué là encore n'hésitez pasà nous demander est-ce que c'est quelque chose que je suiscensé savoir faire souvent si c'estvoilà si l'énoncé est compliqué que la réponse
01:27:24 :est compliquée c'est souvent que c'est de l'algo compliquéqui sert à rien pour fairesimple à votreniveau je dirais bon voilà sivous me parlez d'un débutant qui fait du piton depuisdeux semaines probablement que le moindre exerciceil va trouver ça compliqué et je vais pas lui dire
01:27:38 :oui non t'inquiète pas c'est de l'algo qui sert à rienlà probablement qu'en fait non c'est voilà ça va justeêtre qu'il connait pas les bonnes fonctions les bons trucsà faire et il faut qu'il bossemais à votre niveau làoù vous êtes un peu tous là ce soir
01:27:50 :de ce que je connais de votre niveauvoilà sivraiment vous comprenez absolument rienc'est super compliqué et que même en regardantla solution c'est que des trucs super compliquésparlez-enquand même vous voyez pour qu'il y a peut-êtredes petits bouts intéressantsdans le truc mais souvent c'est voilà
01:28:08 :c'est plus de l'algo pur entre guillemetsqui a moins d'intérêt je trouvemais c'est vraiment cas par cas faut vraiment en parlerparce qu'on peut pas vraiment faire de généralitéça va dépendre du niveau de la personneça va dépendre de l'énoncé et de tout çadonc n'hésitez pas à en parler
01:28:22 :c'est tout bon ?et bien merci à vouset je vais vous souhaiter de bonnes fêtespuisque comme je l'avais annoncédu coup ça va être la dernière session de cette annéela PA est partieet semaine prochaine c'est çaon est déjà le 21 donc on va faire
01:28:59 :la prochaine le 4 je penseon va voir si on change un petit peules dates ou quoion va voir avec Fredon va s'organiserje dis Fred parce que je suis en train dechercher un autre mentor aussi pourpotentiellement en faire plusdonc ouaison va voir ça
01:29:19 :je vous tiendrai au courant bien sûrregardez vos mails, regardez le serveur discordje l'annoncerai aux deux endroitsmais voilà on va vous tenir au courantah super Célinec'est bien de refaire les chosesfrom scratch aussi des fois de repasser à travers toutmerci tout le mondeet ouais Gab bientôt mentor
Aucune occurrence trouvée pour « ».
00:04:20
Présentation de l'advent of code sur le serveur Discord
00:07:19
Présentation du nouveau projet du mois (système de gestion de forums)
00:10:51
Question de Gabriel sur les modèles de son application Django
00:14:09
Question de Gabriel sur les groupes et les permissions
00:28:03
Présentation du problème #1 de l'Advent of Code
00:33:29
Comment aborder la résolution du problème ?
00:42:11
Écriture du code pour la première solution
00:54:49
Vérification de la solution de Gabriel
01:01:55
Écriture du code pour la deuxième solution (avec les regex)
01:14:25
Question de Sylla sur les attributs privés et protégés
01:20:54
Question de Gabriel sur les algorithmes
Bravo, tu es prêt à passer à la suite