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.
# 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/toto
viatruc.toto
en 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 child
etcd .. # 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/absolu
en 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 child
ne 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.