Personne ne nous a rien demandé, mais parce que personne ne résiste à une bonne vieille mise à jour systÚme, il faut absolument mettre à jour le transmetteur défectueux que les lutins nous ont refilé. Seulement, pour ça, il faut faire un peu de place dans son systÚme de fichiers.
Forum Programmation.autre Avent du Code, jour 7
PostĂ© par đČ Tanguy Ortolo (site web personnel) .
Licence CC ByâSA.
7
déc.
2022
# En Python
PostĂ© par đČ Tanguy Ortolo (site web personnel) . ĂvaluĂ© Ă 5.
Ăa commence Ă devenir un tout petit peu sĂ©rieux. Aucune vraie difficultĂ© Ă comprendre ou Ă implĂ©menter le problĂšme, mais on commence Ă sortir des trucs un peu rĂ©cursifs.
En bon unixien, je considÚre bien sûr qu'un répertoire est un type particulier de fichier, qu'il contient toujours une vraie entrée
.., et que le nom d'un fichier n'est pas une propriété intrinsÚque mais simplement un nom qu'il porte dans une entrée de répertoire.[^] # Re: En Python
PostĂ© par steph1978 . ĂvaluĂ© Ă 3.
En bon unixien, un rĂ©pertoire pĂšse en lui mĂȘme 4096 octets, Ă ajouter Ă son contenu. Et un fichier est arrondi aux 4Ko supĂ©rieurs. Ăa changerai sĂ»rement la rĂ©ponse. đ
[^] # Re: En Python
PostĂ© par đČ Tanguy Ortolo (site web personnel) . ĂvaluĂ© Ă 3.
Pas en ReiserFS, le systĂšme de fichier qui tue le gaspillage d'espace de stockage.
[^] # Re: En Python
PostĂ© par Eric P. . ĂvaluĂ© Ă 2.
J'ai fait une solution assez similaire, en plus crade (pas d'heritage, de typing etc.).
Et surtout pas de yield dans la fonction recursive qui aplatit les repertoires (je copie les references dans une nouvelle list). J'avoue que ta solution est plus elegante, et c'est marrant que tu fasses du code presque prod ready (mypy...).
Perso je commence les problemes quand j'ai du temps dans la soiree, mais une fois que j'ai commence j'essaye de trouver la reponse le plus rapidement possible.
Excusez l'absence d'accents dans mes commentaires, j'habite en Australie et n'ai pas de clavier francais sous la main.
[^] # Re: En Python
PostĂ© par đČ Tanguy Ortolo (site web personnel) . ĂvaluĂ© Ă 5.
Je profite en fait de l'AoC pour dĂ©couvrir les fonctionnalitĂ©s de typage de Python. Une fois passĂ© l'apprentissage, qui n'est vraiment pas horrible, ça ne fait pas perdre du temps, au contraire, ça permet de dĂ©tecter certaines erreurs de façon bien plus rapide et de mieux identifier d'oĂč elles viennent.
[^] # Re: En Python
PostĂ© par Yth (Mastodon) . ĂvaluĂ© Ă 3.
Et un peu d'utilisation de fonction magiques chez moi ici :
Et là pour chopper le sous-répertoire
"toto"de monDirectory(truc)je faistruc['toto'].Je n'ai mĂȘme pas pensĂ© Ă inclure le
'..'dans mes fichiers, j'ai un cas particulier si on faitcd .., c'Ă©tait tellement Ă©vident de faire ça !On pourrait accĂ©der Ă
truc/totoviatruc.totoen implémentant__getattr__comme j'ai fait le__getitem__, mais si"toto"est dans une variable il faut fairegetattr(truc, variable_toto), ça ne simplifie pas la lecture, c'est plus simple d'utilisertruc[variable_toto].AprÚs on peut implémenter
__truediv__et faire que truc/"toto" retourneDirectory(truc/toto).LĂ on a
root/"a"/"b"/".."/"c"/".."/".."/"e"/"f" = Directory("/e/f"):)Mais les guillemets partout alourdissent la lecture et l'écriture...
Sinon, cĂŽtĂ© algo, et mĂȘme implĂ©mentation, c'est pareil rien Ă signaler, pas de subtilitĂ©, j'ai juste utilisĂ© du
if line.startswith("$ cd"): cwd = cwd[line[5:]]plutĂŽt qu'une regexp.# un bout de AWK
PostĂ© par steph1978 . ĂvaluĂ© Ă 3. DerniĂšre modification le 07 dĂ©cembre 2022 Ă 11:12.
Comme le FS est parcourus "en profondeur d'abord" et dans l'ordre, pas besoin d'une structure de données trop compliquée type arbre, une simple liste suffit.
partie 1
J'ai perdu au moins une demie heure sur le fait que j'ai interprété "at most" en "au moins" car j'imaginais chercher des trucs gros (on veut libérer de la place). Alors que c'est "au plus" ; GRRR ; Bien lire l'énoncée sans faire d'hypothÚse !
partie 2
Pour cette partie oĂč il faut trouver le dossier qui permet de libĂ©rer l'espace juste nĂ©cessaire pour dl la mise Ă jour, j'ai utilise un script de debug qui me liste les tailles de tous les rĂ©pertoires. J'ai calculĂ© Ă la main l'espace qu'il me faillait, et j'ai regardĂ© dans la liste triĂ©e des tailles (
| sort -n) celle qui était juste au dessus. Oui on a le droit de bidouiller pour l'AoC si ça permet d'aller plus vite à la solution.[^] # Re: un bout de AWK
PostĂ© par đČ Tanguy Ortolo (site web personnel) . ĂvaluĂ© Ă 3.
Bien joué, je n'avais pas remarqué cela. Ceci dit, je n'aime pas trop me baser sur des suppositions qui ne sont absolument pas garanties par l'énoncé.
[^] # Re: un bout de AWK
PostĂ© par steph1978 . ĂvaluĂ© Ă 3.
En fait vu la structure de l'input oĂč il n'y a que de
cd childetcd .. # parent, c'est nécessairement un parcours d'arbre en profondeur d'abord. Il n'y a pas d'autres représentations de la relation parent-enfants, genrecd /chemin/absoluen aléatoire.Et puis je préfÚre faire un code simple, le valider sur l'exemple, voire cramer un essai, avant de compliquer le code.
[^] # Re: un bout de AWK
PostĂ© par đČ Tanguy Ortolo (site web personnel) . ĂvaluĂ© Ă 3. DerniĂšre modification le 07 dĂ©cembre 2022 Ă 15:19.
C'est idiot, on est d'accord. Mais ce n'est pas un parcours en profondeur d'abord.
[^] # Re: un bout de AWK
PostĂ© par steph1978 . ĂvaluĂ© Ă 2.
C'est vrai que rien n'empĂȘche de repasser deux fois pas le mm endroit pour pousser l'exploration des rĂ©pertoires. Mais en effet c'est tordu et je n'avais pas de raison de me protĂ©ger "Ă prirori" de ce cas de figure. Si je n'Ă©tais pas parvenu Ă passer le test et la premiĂšre partie, j'aurai regardĂ© d'un peu plus prĂšs pour voir si des commandes
cd childne se répetent pas.# Procrastination
PostĂ© par đČ Tanguy Ortolo (site web personnel) . ĂvaluĂ© Ă 4.
On dirait que le PĂšre NoĂ«l, ou les lutins, ou les deux, ne sont pas si motivĂ©s que ça pour aller effectivement courir la jungle pour rĂ©colter des caramboles. Ăa traĂźne Ă faire des inventaires, Ă monter le camp, Ă nettoyer le camp, Ă dĂ©charger le bateau, Ă rĂ©organiser le matĂ©riel dĂ©chargĂ©, Ă bidouiller des communicateurs, Ă mettre Ă jour ces communicateurs...
Ăa fait six jours qu'on a dĂ©barquĂ©, et n'a pas encore bougĂ© du camp ! Vivement que les lutins nous fournissent une carte pour aller quelque part.
[^] # Re: Procrastination
PostĂ© par steph1978 . ĂvaluĂ© Ă 4.
Toi t'as envie de ressortir quelques algos de parcours de graphes :) Dijkstra sort de ce corps!
Suivre le flux des commentaires
Note : les commentaires appartiennent Ă celles et ceux qui les ont postĂ©s. Nous nâen sommes pas responsables.