Advent of code

 9 décembre 2024 

  Disk Fragmenter : Déplacer des valeurs par bloc dans des endroits disponibles.
2378984580121520505930414446619015763552254
Sûrement plus simple et propre en utilisant des listes chaînées plutôt que des tableaux.
J'ai créé une classe File juste pour pouvoir faire fichier.id au lieu du fichier[id] d'un dictionnaire et que c'est plus propre (mais moins rapide) que des fichier[1].
  1. code.py
  2. diff_versionBug_versionCorrigee.diffy
# Ce code buggue en partie 1 avec d'autres inputs             <
# Si on arrive dans un état '000122.....3' (. = libre)        <
#    alors on essaie de swaper le 3 avec un élément de fin    <
#    qui n'existe plus !                                      <
                                                              <
  ...                                                             ...

# Part 1: moving block by block                                 # Part 1: moving block by block, version sans le bug
def defrag_part1(system):                                       def defrag_part1(system):
    free_pos = next((k for k in range(len(system)) if system[       free_pos = next((k for k in range(len(system)) if system[
                                                              >     last_block = system.pop()
    while free_pos != NOT_FOUND:                                    while free_pos != NOT_FOUND:
                                                              >         system[free_pos] = last_block
        last_block = system.pop()                                       last_block = system.pop()
        while last_block is None:                                       while last_block is None:
            last_block = system.pop()                                       last_block = system.pop()
        system[free_pos] = last_block                         <
        free_pos = next((k for k in range(free_pos + 1, len(s           free_pos = next((k for k in range(free_pos + 1, len(s
                                                              >     system.append(last_block)
    return system                                                   return system

  ...                                                             ...